熊猫合并失败并显示“未来警告:逐元素比较失败”

时间:2019-07-17 01:24:44

标签: python sql pandas numpy merge

我正在尝试合并两个数据帧(一个来自我的数据库,另一个来自一个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查询。

1 个答案:

答案 0 :(得分:0)

我能够找到解决方案,但原因不明。原来,当我更改查询方式时,我的查询参数(即user_id)从int更改为str。我一直无法观察到输出数据帧的任何变化,但是将str强制转换为int可以解决此问题。