在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文件,文件路径中含有中文,无法读取怎么处理?