我有两个csv,其中行可以通过一列中的值匹配(在对此列进行一些调整之后)。在匹配之后,我想从它们中取出一些值并创建一个新的组合行。我想到了一个简单的脚本,使用csv.DictReader为他们两个,然后一个双
for row1 in csv1:
for row2 in csv2:
if row1['someID'] == row2['someID]:
newdict = ... etc
但是,1个文件是900万行,另一个是500k行。所以我的代码需要4.5 * 10 ^ 12次迭代。因此我的问题是:什么是匹配它们的快速方法?重要: 这个' someID'它们匹配的是既不是csv唯一的。 我希望每场比赛都有额外的行。所以,如果一个' someID'出现 在csv1和csv2的3倍中,我希望在这个' someID'在最后的结果中。
答案 0 :(得分:0)
试试这个:而不是迭代,在两个文件上使用pandas.read_csv(),并在someID
上合并它们。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html
例如:
import pandas as pd
csv1 = pd.read_csv(path1)
csv2 = pd.read_csv(path2)
merged = csv1.merge(csv2, on='someID')
merged['new_column'] = ...
Pandas操作遍及整个numpy数组,这比在元素级迭代要快得多。