如何用熊猫读大型的CSV?

时间:2019-03-31 07:17:36

标签: python dataframe out-of-memory

我正在加载一个大约16GB的rdx(类似csv格式)文件作为pandas数据帧,然后通过删除一些行将其削减。这是代码:

import pandas as pd

t_min, t_max, n_min, n_max, c_min, c_max = raw_input('t_min, t_max, n_min, n_max, c_min, c_max: ').split(' ')

data=pd.read_csv('/Users/me/Desktop/foo.rdx',header=None)

new_data=data.loc[(data[0] >= float(t_min)) & (data[0] <= float(t_max)) & (data[1] >= float(n_min)) & (data[1] <= float(n_max)) & (data[2] >= float(c_min)) & (data[2] <= float(c_max))]

此代码适用于较小的文件(约5GB),但似乎无法加载该大小的文件。有没有解决方法?或者也许是bash脚本的方式来做到这一点?

任何帮助或建议都将不胜感激。

1 个答案:

答案 0 :(得分:3)

尝试使用chunksize参数,先进行大块过滤,然后再进行concat

t_min, t_max, n_min, n_max, c_min, c_max = map(float, raw_input('t_min, t_max, n_min, n_max, c_min, c_max: ').split())

num_of_rows = 1024
TextFileReader = pd.read_csv(path, header=None, chunksize=num_of_rows)

dfs = []
for chunk_df in TextFileReader:
    dfs.append(chunk_df.loc[(chunk_df[0] >= t_min) & (chunk_df[0] <= t_max) & (chunk_df[1] >= n_min) & (chunk_df[1] <= n_max) & (chunk_df[2] >= c_min) & (chunk_df[2] <= c_max)])

df = pd.concat(dfs,sort=False)