【问题标题】:Python pandas merge keyerrorPython pandas 合并键错误
【发布时间】:2016-03-17 13:45:02
【问题描述】:

当我尝试合并两个数据框时,始终出现键错误。代码:

c = pd.merge(a, b, on='video_id', how='left')

根据互联网研究,我仔细检查了 dtype 并将两者强制转换为 int:

a = pd.read_csv(filename, index_col=False, dtype={'video_id': np.int64}, low_memory=False)
b = pd.read_csv(videoinfo, index_col=False, dtype={'video_id': np.int64})

重命名列(以确保它们匹配):

a.columns.values[2] = "video_id"
b.columns.values[0] = "video_id"

强制转换为 df:

c = pd.merge(pd.DataFrame(a), pd.DataFrame(b), on='video_id', how='left')

不知道为什么我仍然收到 keyerror。而且总是“KeyError: 'video_id'”

【问题讨论】:

  • 您应该发布原始数据的样本以重现您的问题。

标签: python python-2.7 pandas merge


【解决方案1】:

您要小心不要使用df.columns.values 重命名列。这样做会使列名上的索引拧紧。

如果您知道要替换哪些列名,您可以尝试以下方法:

a.rename(columns={'old_col_name':'video_id'}, inplace = True)
b.rename(columns={'old_col_name':'video_id'}, inplace = True)

如果不提前知道列名,可以试试:

col_names_a = a.columns
col_names_a[index] = 'video_id'
a.columns = col_names_a

请记住,您实际上不需要在两个数据框上使用相同的列名。 Pandas 允许您在每个数据框中指定单独的名称

pd.merge(a, b, left_on = 'a_col', right_on = 'b_col', how = 'left')

【讨论】:

    【解决方案2】:

    列名称中的一个 dfs 中有一个前导空格,'video_id ' 而不是 'video_id'。不知道为什么最初的重命名没有解决这个问题,但它已经修复了。

    【讨论】:

      【解决方案3】:

      将 left_on 和 Right_on 参数作为数组发送对我有用。

      c = pd.merge(pd.DataFrame(a), pd.DataFrame(b), left_on=['video_id'], 
                   right_on= ['video_id'], how='left')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-05
        • 1970-01-01
        • 1970-01-01
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-30
        相关资源
        最近更新 更多