我有两个大的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循环之类的事情是否真的可行
答案 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类似,并且易于使用。