我有 2 个文件,每个文件有 38374732 行,每个文件大小 3.3 G。我正在尝试加入他们的第一列。为此,我决定使用 pandas 以及从 Stackoverflow 中提取的以下代码:
import pandas as pd
import sys
a = pd.read_csv(sys.argv[1],sep='\t',encoding="utf-8-sig")
b = pd.read_csv(sys.argv[2],sep='\t',encoding="utf-8-sig")
chunksize = 10 ** 6
for chunk in a(chunksize=chunksize):
merged = chunk.merge(b, on='Bin_ID')
merged.to_csv("output.csv", index=False,sep='\t')
但是我遇到了内存错误(并不奇怪)。我查看了带有 pandas block 的代码(类似于 How to read a 6 GB csv file with pandas ),但是如何在循环中为两个文件实现它,我不认为我可以对第二个文件进行分块,因为我需要查找列在整个第二个文件中。有办法解决这个问题吗?
最佳答案
这已经在其他帖子中讨论过,例如您提到的帖子( this 或 this 或 this )。
正如那里所解释的,我会尝试使用 dask dataframe加载数据并执行合并,但根据您的电脑,您可能仍然无法执行此操作。
最小工作示例:
import dask.dataframe as dd
# Read the CSVs
df1 = dd.read_csv('data1.csv')
df2 = dd.read_csv('data2.csv')
# Merge them
df = dd.merge(df1, df2, on='Bin_ID').compute()
# Save the merged dataframe
df.to_csv('merged.csv', index=False)
关于python - 在python中按列连接两个大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50101772/