我有两个大的csv文件。一个是另一个的子集(但不是以相同的顺序),但最后添加了两个新字段。例如:
文件一:
a, b, c
b, a, c
a, c, d
c, a ,a
文件二:
c, a, a, g, i
b, a, c, f, g
我想创建一个新版本的文件,其中包含这些新字段,它们存在于文件二中。 E.g。
修改过的文件一:
a, b, c,,
b, a, c, f, g
a, c, d,,
c, a ,a, g, i
在熊猫中我可以阅读它们,虽然它们很大,但是
df1 = pandas.read_csv("file1.csv")
df2 = pandas.read_csv("file2.csv")
如何创建修改过的文件?
答案 0 :(得分:1)
这将满足您的需求:
df1 = pd.read_csv("file1.csv", header=None)
df2 = pd.read_csv("file2.csv", header=None)
df1.merge(df2, on=[0,1,2], how='left').to_csv('file3.csv', header=None, index=False)
保持两个dfs的记录使用:
df1.merge(df2, on=[0,1,2], how='outer')
如果您有更多列,则可以使用columns.tolist()
来避免硬输入:
df1.merge(df2, on=df1.columns.tolist(), how='outer')
答案 1 :(得分:1)
您可以使用pandas.DataFrame.merge记录here
modified_df1 = df1.merge(df2, how='left')
默认情况下,如果调用中未定义on
,则merge将使用两个数据帧的交集来执行连接。
>>> df1 = pd.DataFrame([['a', 'b', 'c'],['b', 'a', 'c'],['a', 'c', 'd'],['c', 'a' ,'a']])
>>> df2 = pd.DataFrame([['c', 'a', 'a', 'g', 'i'],['b', 'a', 'c', 'f', 'g']])
>>> df1.merge(df2, how='left')
0 1 2 3 4
0 a b c NaN NaN
1 b a c f g
2 a c d NaN NaN
3 c a a g i
>>>
然后你可以将modified_df1
写回csv文件,如:
modified_df1.to_csv('modified_file.csv', header=None, index=False)