最近在处理数据相关需求,遇到一个问题:两个文件,fileA.csv和fileB.csv,结构相同,fileA包含fileB的内容,但是需要得到二者的差集,输出新的文件fileC。
经过查询资料,发现pandas可以很好的处理数据相关需求,经常处理大数据的小伙伴对这个神器肯定不陌生。
我第一次接触,所以记录一下使用经历,以后再遇到类似需求,可以多研究下。
import pandas as pd# 读取文件 A
dataA = pd.read_csv('./temp/fileA.csv')# 读取文件 B
dataB = pd.read_csv('./temp/fileB.csv')# 合并数据框,并标记每个值的来源,注:Column1,Column2 为csv文件的列名,即文件首行数据的值
merged = dataA.merge(dataB, on=['Column1', 'Column2'], how='left', indicator=True)# 筛选出只在文件 A 中存在的行
diff = merged[merged['_merge'] == 'left_only']# 删除标记列
diff = diff.drop('_merge', axis=1)# 将差值写入新文件 C
diff.to_csv('./temp/fileC.csv', index=False)
简单解释下上面的代码:
1. 读取文件 fileA 和 fileB的内容
2. 使用 merge()
函数将文件 A 和文件 B 按照Column1和Column2列进行合并
on=['Column1', 'Column2'] 合并的列名称
how='left' 表示以左边的数据为准(即fileA数据),这个参数可以理解为SQL中的left join
indicator=True 用来标记文件中每个值的来源
3. 通过标记列 _merge
,筛选出只在文件 A 中存在的行
4. 删除标记列 _merge
5. 将差集结果写入新的 CSV 文件 fileC
同理,pandas还可以处理excel、txt文本等文件,具体的e处理方法,感兴趣的小伙伴可以自己搜索下。