使用pandas在不崩溃的情况下高效地读取大型CSV文件

2024-04-25 06:31:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这就是我在朱庇特笔记本上写的

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()

只有最后一块被写了其他的被写了


Tags: 文件csvorghttpread计算机笔记本mb
2条回答

在读取数据帧时,应该考虑使用^{}中的chunksize参数,因为它返回一个TextFileReader对象,然后可以传递给pd.concat来连接块。

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

如果您只想单独处理每个块,请使用

chunksize = 20000
for chunk in pd.read_csv('./movielens/ratings.csv', 
                         chunksize=chunksize, 
                         iterator=True):
    do_something_with_chunk(chunk)

尝试这样做-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)

相关问题 更多 >