【问题标题】:multiple chunks simultaneously pandas large data多个块同时处理大数据
【发布时间】:2021-03-07 14:55:05
【问题描述】:

我正在尝试使用块连接两个超大 (>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 的第一个块 =(

【问题讨论】:

    标签: pandas dataframe chunks


    【解决方案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
    

    虽然文件这么大,但仍需要一段时间。

    【讨论】:

    • 是的,似乎在测试数据上表现良好。会试穿大号的。谢谢。
    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多