首页 > 解决方案 > 如果匹配列合并两个 csv 文件然后覆盖

问题描述

type示例我有这两个 csv,如果它与fruita.csv 和 b.csv 中的列中的字符串都匹配,如何覆盖 a.csv 中列的值或替换

a.csv

fruit,name,type
apple,anna,A
banana,lisa,A
orange,red,A
pine,tin,A

b.csv

fruit,type
banana,B
apple,B

如何输出:或如何覆盖

fruit,name,type
apple,anna,B
banana,lisa,B
orange,red,A
pine,tin,A

我正在尝试使用熊猫,但我不知道接下来会发生什么

df1=pd.read_csv("sha1_vsdt.csv",delimiter=",",error_bad_lines=False,engine = 'python',quoting=3)
df2=pd.read_csv("final.csv",delimiter=",",error_bad_lines=False,engine = 'python',quoting=3)

df = pd.merge(df1, df2, on='SHA-1', how='outer')

标签: pythonpandascsv

解决方案


根据您给出的输入

import pandas as pd
df1=pd.read_csv("a.csv")
df2=pd.read_csv("b.csv")
df = pd.merge(df1, df2, on='fruit', how='outer')
df['type_x'] = df['type_y'].combine_first(df['type_x'])
del df["type_y"]
df = df[pd.notnull(df['name'])]

输入df1

    fruit   name    type
0   apple   anna    A
1   banana  lisa    A
2   orange  red     A
3   pine    tin     A

输入df2

    fruit   type
0   banana  B
1   lemon   B

输出

   fruit    name    type_x
0   apple   anna    A
1   banana  lisa    B
2   orange  red     A
3   pine    tin     A

如果您有不同的文件具有不同的列名

import pandas as pd
df1=pd.read_csv("a.csv")
df2=pd.read_csv("b.csv")
df = pd.merge(df1, df2, on='fruit', how='outer')
df[df.columns[2]] = df[df.columns[3]].combine_first(df[df.columns[2]])
del df[df.columns[3]]
df = df[pd.notnull(df[df.columns[1]])]

推荐阅读