【问题标题】:Pandas merge failing with "FutureWarning: elementwise comparison failed"熊猫合并失败并出现“FutureWarning:元素比较失败”
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-10-02
      • 2020-03-04
      • 2016-08-05
      • 2017-04-01
      • 2016-12-06
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      相关资源
      最近更新 更多