我有两个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次,我希望在最终结果中有6行具有此'someID'。
试试这个:而不是迭代,在两个文件上使用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数组,这比在元素级别迭代要快得多。