如何按列的值合并两个csv文件,其中一个是python的另一个子字符串?

时间:2019-09-10 11:23:06

标签: python pandas csv merge

我正在处理一个csv文件,其中包含〜100.000 bib条目,包括作者,标题,位置和年份(请参阅bib1.csv)。我有另一个csv文件(bib2.csv),其中包含bib1.csv的子集。由于此子集包含其他字段(即bib1.csv中缺少的发布者),因此我想将这两个字段合并,最好使用python的pandas。因为bib1.csv很可能包含多个作者的Bibentry,所以仅对作者进行合并将无法满足我的要求。问题:bib1.csv包含完整标题,而bib2.csv包含简短标题,它是完整标题的子字符串。


bib1.csv

author,fulltitle,place,year
author1,title one 1,place1,1800
author2,title two one 2.1,place2,1801
author2,title two two 2.2,place2,1802
author3,title three one 3.1,place3,1803
author3,title three two 3.2,place4,1803

bib2.csv

author,shorttitle,publisher,year
author1,one 1,publisher1,1800
author2,2.1,publisher2,1801
author2,two two,publisher2,1802
author3,title three two,publisher1,1803

我从基于熊猫的python脚本开始(请参见下文),首先阅读csv文件并将两者合并。然后我遇到了“ isin”和“ str.contains”。由于csv2的short-title列包含csv1中的fulltitle的子字符串,因此我正在寻找一种方法,该方法以基于非字符串的方式比较列字段。问题:是否有类似的东西:

finalbib = mergedbib.loc[mergedbib['fulltitle'].str.contains('$shorttitle')]

任何暗示都值得赞赏。


mergebib.py

import pandas as pd

bib1 = pd.read_csv('bib1.csv', skipinitialspace=True, delimiter=',', parse_dates=True)
bib2 = pd.read_csv('bib2.csv', skipinitialspace=True, delimiter=',', parse_dates=True)

mergedbib = bib1.merge(bib2, on=['author']).drop('shorttitle', axis=1).drop('year_y', axis=1)

finalbib = mergedbib # here my substring-constraint

print(finalbib.to_csv(index=False))

0 个答案:

没有答案