平均大型csv文件

时间:2018-12-11 10:24:44

标签: python pandas csv

我有两个大的csv文件,它们使用node作为迭代器加载。这些文件足够大,无法容纳在内存中:

pd.read_csv

文件内容类似于:

df1

df1 = pd.read_csv('file1.csv', chunksize=5000000, iterator=True)
df2 = pd.read_csv('file2.csv', chunksize=5000000, iterator=True)

df2

Id   val1   val2   val3
1    0.5    0.45   0.13
2    0.11   0.18   0.20

两个文件的Id val1 val2 val3 1 0.4 0.5 0.20 2 0.13 0.30 0.22 列具有相同的值。列名也是如此。我想做的是对Id列中的值取元素的均值,然后将它们放入具有相同ID列的另一个csv中。

因此,此输出类似于:

val

关于如何解决此问题的任何想法? Id val1 val2 val3 1 0.45 0.475 0.165 2 0.12 0.24 0.21 是正确的方法还是应该使用read_csv之类的东西?我当时想的是同时迭代迭代器并利用块的手段,然后将它们附加到另一个csv文件中,但是我不确定对于for循环之类的事情是否真的可行

1 个答案:

答案 0 :(得分:0)

我还没有尝试下面的代码,但是我想您可以看到我的使用方向。您可以使用“增加和增加”功能。我感到,快做可能是“正确的”方法。我过去曾经使用过它,他们的api似乎很容易使用。

import pandas as pd

result = []

MAX_ROW_NO= 1000
STEP_SIZE = 10

for i in range(0,M AX_ROW_NO, STEP_SIZE):
    temp1 = pd.read_csv("file1.csv",skiprows=i,nrows=STEP_SIZE)
    temp2 = pd.read_csv("file2.csv",skiprows=i,nrows=STEP_SIZE)
    temp_avg = (temp1 + temp2)/2
    result.append(temp_avg)

df_avg = pd.concat(result)

编辑:我认为简单的解决方案看起来会更整洁。我认为它看起来像:

import dask.dataframe as dd
df1 = dd.read_csv('file1.csv')
df2 = dd.read_csv('file.csv')

df_avg = (df1 + df2)/2

df_avg.to_csv("file_avg.csv")

我还没有尝试过,但是dask dataframe命令与pandas类似,并且易于使用。