【问题标题】:Python with fuzzy,pandasPython与模糊,熊猫
【发布时间】:2017-12-26 06:06:15
【问题描述】:

我有两个 csv,其中的行可以与一列中的值匹配(在对该列进行一些调整之后)。匹配后,我想从它们中获取一些值并创建一个新的组合行。我想到了一个使用 csv.DictReader 的简单脚本,然后是双

for row1 in csv1:
for row2 in csv2:
    if row1['someID'] == row2['someID]:
        newdict = ... etc

但是,一个文件是 900 万行,另一个是 500k 行。所以我的代码需要 4.5 * 10^12 次迭代。因此我的问题是:什么是匹配它们的快速方法?重要的: 它们匹配的这个“someID”在 csv 中都不是唯一的。 我希望每场比赛都有额外的行。因此,如果出现“someID” 两次 csv1 和 3 次 csv2,我预计最终结果中有 6 行带有这个“someID”。

【问题讨论】:

  • 两列中的 someID 是否唯一?

标签: python pandas fuzzy-search


【解决方案1】:

试试这个:不要迭代,而是在两个文件上使用 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 数组上进行的,这比在元素级别迭代要快得多。

【讨论】:

  • 您好,感谢您的回复,但问题在于 csv1 有 14k 条记录,而 csv2 有 14M 条记录
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多