Python与模糊,熊猫

时间:2017-12-26 06:06:15

标签: python pandas fuzzy-search

我有两个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'在最后的结果中。

1 个答案:

答案 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数组,这比在元素级迭代要快得多。