使用pandas有效地读取大型CSV文件而不会崩溃

时间:2017-08-24 20:18:11

标签: python pandas csv dataframe jupyter-notebook

我正在尝试从http://grouplens.org/datasets/movielens/20m/读取名为ratings.csv的.csv文件,该文件在我的计算机中为533.4MB。

这就是我在jupyter笔记本上写的内容

import pandas as pd
ratings = pd.read_cv('./movielens/ratings.csv', sep=',')

这里的问题是内核会中断或死亡并要求我重新启动并且它会不断重复。没有任何错误。请问你可以建议任何解决这个问题的方法,就好像我的电脑无法运行它。

这有效但不断重写

chunksize = 20000
for ratings in pd.read_csv('./movielens/ratings.csv', chunksize=chunksize):
ratings.append(ratings)
ratings.head()

只有最后一个块写入其他块被注销

2 个答案:

答案 0 :(得分:6)

在阅读数据框时,您应该考虑在read_csv中使用chunksize参数,因为它会返回一个TextFileReader对象,然后您可以将其传递给pd.concat以连接您的数据块。

chunksize = 100000
TextFileReader = pd.read_csv('./movielens/ratings.csv', sep=',', chunksize=chunksize, iterator=True)
df = pd.concat(TextFileReader, ignore_index=True)

适应编辑:

chunksize = 20000
out = None
for ratings in pd.read_csv('./movielens/ratings.csv', chunksize=chunksize):
    if out is None:
        out = ratings.copy()
    else:
        out.append(ratings)

    out.head()

答案 1 :(得分:0)

尝试这样 - 1)用dask加载然后2)转换为pandas

import pandas as pd
import dask.dataframe as dd
import time
t=time.clock()
df_train = dd.read_csv('../data/train.csv')
df_train=df_train.compute()
print("load train: " , time.clock()-t)