python - 如果匹配列合并两个 csv 文件然后覆盖
问题描述
type
示例我有这两个 csv,如果它与fruit
a.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')
解决方案
根据您给出的输入
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]])]
推荐阅读
- python - 在同一类中的方法中调用变量
- flutter - 添加子列小部件时如何保持容器小部件宽度
- java - 无法使用接口传入位置Recyclerview
- html - ChartJS“半甜甜圈”图表无法正确显示
- web-scraping - Scrapy xpath-selector 不适用于此 html 标签
- python - 制作一个装饰器,可以访问在python中作为输入的函数的参数
- flutter - 无法从列表中获取数据来构建 ListView.builder()
- php - 在php字符串文字中添加变量
- vb.net - 检查 Internet 速度测试 VB.NET
- r - 隐藏基本 R 图的轴的最小和最大限制的刻度线和刻度线标签