我正在尝试合并两个数据帧(一个来自我的数据库,另一个来自一个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查询。即使数据类型或输出没有更改,更改用户标识似乎也可以使其正常工作。
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查询。我希望它也可用于其他SQL查询。
答案 0 :(得分:0)
我能够找到解决方案,但原因不明。原来,当我更改查询方式时,我的查询参数(即user_id)从int更改为str。我一直无法观察到输出数据帧的任何变化,但是将str强制转换为int可以解决此问题。