【发布时间】:2017-09-29 19:33:01
【问题描述】:
我有两个数据框,
df1 = pd.DataFrame({'A': ['A1', 'A1', 'A2', 'A3'],
'B': ['121', '345', '123', '146'],
'C': ['K0', 'K1', 'K0', 'K1']})
df2 = pd.DataFrame({'A': ['A1', 'A3'],
'BB': ['B0', 'B3'],
'CC': ['121', '345'],
'DD': ['D0', 'D1']})
现在我需要从 df1 的 A 列和 B 列以及 df2 的 A 列和 CC 列获取类似的行。 所以我尝试了可能的合并选项,例如:
both_DFS=pd.merge(df1,df2, how='left',left_on=['A','B'],right_on=['A','CC'])
这不会给我来自 df2 数据帧的行信息,这是我需要的。意思是,我有 df2 中的所有列名,但行只是空的或 Nan。
然后我尝试了:
Both_DFs=pd.merge(df1,df2, how='left',left_on=['A','B'],right_on=['A','CC'])[['A','B','CC']]
这给了我错误,
KeyError: "['B'] not in index"
我的目标是拥有一个包含 df1 和 df2 的所有列的合并数据框。任何建议都会很棒
期望的输出:
Both_DFs
A B C BB CC DD
0 A1 121 K0 B0 121 D0
所以在我的数据帧(df1 和 df2)中,只有一行与感兴趣的两列完全匹配。也就是说,df1 中的 A 列和 B 列只有一行与 df2 中的 A 列和 CC 列中的行完全匹配
【问题讨论】:
-
print (df1.columns.tolist())是什么?问题只出在真实数据上? -
因为似乎只有列名中有一些空格,用于消除需要
df.columns = df.columns.str.strip() -
实际数据农场有另一个列名,我的问题中使用的 df1 是虚拟的。因此,使用我的实际数据农场,它会打印出 ['Chr', 'Start', 'End', 'Annotation', 'Detailed Annotation', 'Description', 'Type'] for (df1.columns.tolist())
-
@jezrael 我在 pd.read_csv 本身中为所有列和行读取它时进行了剥离。
-
超级,还是
KeyError?print (df2.columns.tolist())可能有问题吗?