我有一个csv数据库(大小-约1.8 GB),其中包含从网站获取的数据集合。 这是每种线结构的示例:
'link;
post_name;
date_article;
time_article;
user_name;
date_comment;
time_comment;
comment;
like;
dislike\n'
我尝试使用pandas
数据帧对较小的数据库进行分析,一切正常。但是当我收集整个数据库时,遇到了各种内存错误。
设置块大小,编码,缺少标题,分隔符没有帮助。 这是每次在csv文件中传递几乎所有行的8/10时都会崩溃的代码:
import pandas as pd
merged = r'D:\\proj\\db.csv'
ch_size=10**6
tp = pd.read_csv(merged, sep = u';',header=None, chunksize=ch_size, encoding='utf-8', iterator= True)
df = pd.concat(tp, ignore_index=True)
df[10] = df[2]+u',' + df[3]
df[11] = pd.to_datetime(df[10],errors='coerce', format= u'%d.%m.%Y,%H:%M')
df.sort_values(by=11, inplace=True)
更改chunksize的大小会导致错误行。如果是10**6
,则代码在concat
操作时崩溃。如果我将其降低到1000
,它将在sort_values
上崩溃。
还尝试了另一种解决方案:
temp_list = []
for chunk in pd.read_csv(merged, sep = u';',header=None, chunksize=ch_size, low_memory=False):
temp_list.append(chunk)
for df in temp_list:
df[10] = df[2]+u',' + df[3]
df[11] = pd.to_datetime(df[10],errors='coerce', format= u'%d.%m.%Y,%H:%M')
df.sort_values(by=11, inplace=True)
在这里,由于块大小,在对值进行排序时,甚至在for df in temp_list:
中也可能会出现错误。
我还注意到,专用于python进程的RAM几乎达到其限制(我有6 GB)时,代码崩溃。
在这里可以做什么?