【发布时间】:2017-11-10 20:10:54
【问题描述】:
我正在尝试在两个相当大的 csv 文件之间找到 intesect 子集 电话号码(一个有 60 万行,另一个有 3 亿行)。我目前正在使用 pandas 打开两个文件,然后将所需的列转换为 1d numpy 数组,然后使用 numpy intersect 来获取相交。有没有更好的方法来做到这一点,无论是使用 python 还是任何其他方法。感谢您的帮助
import pandas as pd
import numpy as np
df_dnc = pd.read_csv('dncTest.csv', names = ['phone'])
df_test = pd.read_csv('phoneTest.csv', names = ['phone'])
dnc_phone = df_dnc['phone']
test_phone = df_test['phone']
np.intersect1d(dnc_phone, test_phone)
【问题讨论】:
-
您的 CSV 文件的结构是否相同? (即您是在寻找相同的行还是相同的 CSV 字段)?
-
目前每个步骤需要多少时间?哪一步是瓶颈?当前的总运行时间是多少,您的目标总运行时间是多少?顺便说一句,您可以设置
squeeze=True以立即获得系列并跳过dnc_phone = df_dnc['phone']部分。 -
@zwer,是的,有相同的结构并比较相同的 csv 字段。这是电话号码
-
如果这是其中之一,我会坚持使用 pandas,如果您需要至少执行几次或需要进行其他比较,我会将其加载到数据库中跨度>
-
pd.read_csv被誉为最快的 Python csv 阅读器。numpyintersect 可能与合并、排序和检查重复项结合使用。如果数字已经排序并且是唯一的,您可以简化它。
标签: python pandas csv numpy bigdata