当我尝试合并两个数据帧时,一直得到一个keyerror。代码:
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:' video_id'"
答案 0 :(得分:7)
您要小心不要使用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')
答案 1 :(得分:1)
列名称中的某个dfs中有一个前导空格,'video_id'而不是'video_id'。不确定为什么初始重命名没有解决这个问题,但它已经修复了。
答案 2 :(得分:0)
将left_on和Right_on参数作为数组发送对我有用。
c = pd.merge(pd.DataFrame(a), pd.DataFrame(b), left_on=['video_id'],
right_on= ['video_id'], how='left')