python - 在python中按列连接两个大文件

标签 python pandas join dask chunks

我有 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 ),但是如何在循环中为两个文件实现它,我不认为我可以对第二个文件进行分块,因为我需要查找列在整个第二个文件中。有办法解决这个问题吗?

最佳答案

这已经在其他帖子中讨论过,例如您提到的帖子( thisthisthis )。

正如那里所解释的,我会尝试使用 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/

相关文章:

Python PIL 没有属性 'Image'

python - 如何正确索引二维数组 pandas dataframe?

python - 向 Pandas 数据透视表添加过滤器

apache-spark - 激发如何在联接中使用UDF

mysql - MySQL 中返回重复行时如何修复 SUM

python - SSL : WRONG_VERSION_NUMBER ON PYTHON REQUEST

python - 获取 Python Decimal 的精确十进制字符串表示?

python - 使用 pymongo 将自定义 python 对象编码为 BSON

python - 用于将 df.columns 拉入自定义代码的 for 循环

mysql - 为什么 MySQL 连接返回循环集?