在 python 中按列连接两个大文件
Join two large files by column in python
我有 2 个文件,每个文件有 38374732 行,每个文件大小为 3.3 G。我想加入他们的第一列。为此,我决定将 pandas 与从 Whosebug 中提取的以下代码一起使用:
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 块的代码(类似于 How to read a 6 GB csv file with pandas),但是我如何在一个循环中为两个文件实现它,我认为我不能将第二个文件分块为我需要在整个秒中查找列 file.Is 有解决办法吗?
这已在其他帖子中讨论过,例如您提到的帖子 (this, or this, or this)。
正如那里所解释的那样,我会尝试使用 dask dataframe 加载数据并执行合并,但根据您的 PC,您可能仍然无法执行此操作。
最小工作示例:
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)
我有 2 个文件,每个文件有 38374732 行,每个文件大小为 3.3 G。我想加入他们的第一列。为此,我决定将 pandas 与从 Whosebug 中提取的以下代码一起使用:
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 块的代码(类似于 How to read a 6 GB csv file with pandas),但是我如何在一个循环中为两个文件实现它,我认为我不能将第二个文件分块为我需要在整个秒中查找列 file.Is 有解决办法吗?
这已在其他帖子中讨论过,例如您提到的帖子 (this, or this, or this)。
正如那里所解释的那样,我会尝试使用 dask dataframe 加载数据并执行合并,但根据您的 PC,您可能仍然无法执行此操作。
最小工作示例:
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)