【发布时间】:2019-11-25 18:50:06
【问题描述】:
我正在尝试合并两个数据框(一个来自我的数据库,一个来自 API)。数据帧收集得很好并且具有正确的数据类型,但是每当我尝试使用 pd.merge(df1, df2, on_left, on_right) 时,都会出现错误
FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
并返回一个空数据框
我看到的每一个地方,错误似乎都与类型错误有关(例如,FutureWarning: elementwise comparison failed; returning scalar, but in the future will perform elementwise comparison)。
不过,我几乎可以肯定我的数据类型是正确的。
奇怪的是,这个错误似乎取决于我的 SQL 查询。即使数据类型或输出没有变化,更改用户 ID 似乎也能正常工作。
sql = """
SELECT
meeting_id, doccano_project_id, document_id, date_added,
user_provided_date_time, speaker_id, start_time_in_s, stop_time_in_s,
pauses, number_of_words
FROM
utterance JOIN meeting ON utterance.meeting_id = meeting.id
AND
meeting_id IN (SELECT DISTINCT
meeting_id
FROM
utterance
WHERE
speaker_id = %s)
"""
utt_df = pd.read_sql(sql, conn, params=(user_id,))
print(utt_df['document_id'].head())
print(docs_df['id'].head())
combined_df = pd.merge(utt_df, docs_df, left_on='document_id',
right_on='id')
0 1591
1 1592
2 1593
3 1594
4 1595
Name: document_id, dtype: int64
0 1635
1 1634
2 1633
3 1632
4 1631
Name: id, dtype: int64
print(set(utt_df['document_id']) == set(docs_df['id']))
# True
即使数据类型或数据帧的任何可观察方面没有差异,该代码也适用于某些 sql 查询,但不适用于其他查询。我希望它也适用于其他 sql 查询。
【问题讨论】:
标签: python sql pandas numpy merge