python - 加入两个大文件而不用熊猫分块
问题描述
我有带有“id,name”的 File1 和带有“id,address”的 File2。我无法加载第一个文件(小于 2Gb):它在 76k 行(带有块 concat)并且只有 2 列之后崩溃......我也无法在第二个文件上 read_csv,因为它在加载一些行后崩溃了内核。
我需要使用“id”加入 File1 和 File2 但如果我不能将文件放入数据框变量中,我不知道该怎么做......
该文件只有 5Gb,有 30M 行,但加载几秒钟后内核就会崩溃。
请问如何在没有数据帧的情况下加入文件?
我试过用夹头,但它崩溃了。
chunks = []
cols = [...]
for chunk in pd.read_csv("file2.csv", chunksize=500000, sep=',', error_bad_lines=False, low_memory=False, usecols=cols):
chunks.append(chunk)
df = pd.concat(chunks, axis=0)
print(f.shape)
如果可能,我需要加载数据框以加入它们或加入文件而不加载
解决方案
您逐块读取 df2 块,但是由于附加了所有块,因此生成的块与 file2 的大小相同。
如果您能够完全加载 df1,您可以做的是像这样逐块加入您的 df2 块:
for chunk in pd.read_csv("file2.csv", chunksize=500000, sep=',', error_bad_lines=False, low_memory=False, usecols=cols):
df1.merge(chunk, on =['id'], how='left')
推荐阅读
- wordpress - 用于多站点安装的子域的子文件夹中的 WordPress
- android - Android Xamarin 应用程序未将 SOs 库部署到设备中
- python - Heroku上的烧瓶:找不到属性
在运行脚本中:错误 H10 desc="App crashed" - php - 在 .ini 文件中使用相对路径
- gitlab - 如何在 gitlab ci 中创建条件逻辑
- xml - 提交站点地图时如何解决 Google 搜索控制台中的 424 http 错误?
- node.js - NodeJS Redis (ioredis) hgetall 抛出未定义的错误
- ruby-on-rails - “物化”:找不到
- here-api - 这里 Waypoint Sequencing API 不支持交付窗口
- python - Python:将 Argparse.parseargs 获取为原始字符串