pandas - 多个块同时处理大数据
问题描述
我正在尝试使用块连接并处理两个非常大(> 800GiB)的文件。
文件看起来像:
文件 1
1 1 0.5
1 2 0.2
2 2 0.4
2 3 0.2...
文件2
1 1 0.6
1 2 0.3
2 2 0.6
2 3 0.7...
我想要的结果是文件:
1 2 0.2 0.3
2 3 0.2 0.7...
我尝试了不同的块代码,但找不到以下选项:从两者中读取 5000 条记录,继续,保存到文件,然后从两者中开始下一个 5000 条。
大约。代码:
mode="w"
file1=pd.read_csv('test1.csv', delim_whitespace=True,header=None,chunksize=5000)
file2=pd.read_csv('test2.csv', delim_whitespace=True,header=None,chunksize=5000)
for chunk in file1:
for chunk1 in file2:
un_file1=chunk[chunk[0]!=chunk[1]]
un_file2=chunk1[chunk1[0]!=chunk1[1]]
conc=pd.concat([un_file2,un_file2[2]],axis=1)
conc.to_csv(r'test_test.csv', header=False,index=False, sep=" ",mode=mode)
mode="a"
因此,在当前代码中,文件 2 中的所有块连接到文件 1 的第一个块 =(
解决方案
这是一种从每个文件中迭代读取一个块,然后合并它们的方法:
df1 = pd.read_csv('test1.csv', chunksize=1000)
df2 = pd.read_csv('test2.csv', chunksize=1000)
while True:
try:
df1c = next(df1)
df2c = next(df2)
df1c = df1c[df1c['0'] != df1c['1']]
df2c = df2c[df2c['0'] != df2c['1']]
df1c.merge(df2c, on=['0', '1']).to_csv(
'test3.csv', header=False, index=False, mode='a')
except StopIteration:
break
尽管使用这种大小的文件,它仍然可能需要一段时间。
推荐阅读
- spring - 无法写入请求:没有找到适合使用 Feign 的请求类型的 HttpMessageConverter
- makefile - CLion makefile error : Error running 'Makefile': Cannot run program "\usr\bin\make" CreateProcess error=2, 系统找不到指定的文件
- redirect - 从 Microsoft Office 中的链接重定向到 Auth0 失败
- python - Python:如何拆分文件中的每一行代码并添加到字典中
- javascript - javascript中while({})有什么用
- python - 我正在尝试计算十年中每个月的平均值,以消除每日波动并将其与 Python 中的每日变化进行对比
- r - 在多列上使用 tidyr::complete
- rdf - 在 RDF 中,主题可以有两个相同(相同的 URI)谓词吗?
- vim - 如何将快速修复列表写入文件
- mysql - 选项文件不影响 MySQL 5.6 客户端