在python中处理几个大的csv [关闭]

Posted

技术标签:

【中文标题】在python中处理几个大的csv [关闭]【英文标题】:processing several big csv in python [closed] 【发布时间】:2021-05-27 18:15:14 【问题描述】:

我正在处理两个大数据集(一个有 100 万条记录和 6 个特征,另一个是大约 7000 条记录和 9 个特征)。我已经使用字典来读取数据并且没有问题,但主要思想是,对于(1000000 条记录)中的每条记录,我需要从另一个 csv 文件中找到匹配的记录......(包括几个 if..else 语句)......并且每次我都应该返回文件的开头来搜索匹配的规则。 这花了几天时间,但仅在 5 天后仍处理了大约 200 000 个。

with open(sys.argv[1]) as csvfile:
    reader1 = csv.DictReader(csvfile)
    for row in reader1:
        Find_Match(row)


def Find_Match(row):
    matches = []
    reader2 = csv.DictReader(open(sys.argv[2]))
    for k in reader2:
        if (several kind of statement for matching like is row[0] is eaual to k[0] and row[1] is in k[1]..and so on)
        else:
        print "no match"
        matches.append(row, k)

【问题讨论】:

为什么不读取第二个文件一次并在 Find_Match 函数中重复使用? 如果我读了一次,我需要将指针返回到(reader2)文件的开头(通过seek(0)),可以做到但同样慢 我的意思是读入一些python结构,然后在函数中使用它。 如果您根据键对字典进行排序,那么您不必为每个查找操作返回到字典的开头。你只需要跟踪你在第二个字典中的位置,你可以通过一个变量来做到这一点。还。如果速度有问题,请删除打印。 您是否尝试过使用 pandas 并进行连接?你的加入条件有点模糊,但如果它们只是=in,那么你可能会幸运地获得少量的 etl 【参考方案1】:

如果在内存中运行所有内容后仍然很慢(如@Alexander 建议的那样)。另一个想法,但取决于数据是:也许你可以尝试提前退出第二个循环,例如在其中一列中创建值的集合/字典,例如:

col0 = k[0] for k in dataset2
def Find_Match(row):
  for k in dataset2:
    if not row[0] in col0:
      continue
    #...

【讨论】:

以上是关于在python中处理几个大的csv [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

python3中使用使用read_csv( )读取csv文件,文件路径中含有中文,无法读取怎么处理?

Python处理CSVJSON和XML数据的简便方法

绕过内存错误以在 Python 中读取大型 JSON 文件 [关闭]

CSV:如何在列表中找到下一个更大的值(python)?

Python中数千个大表的外连接

我可以在 R 中并行读取 1 个大 CSV 文件吗? [复制]