在大型Pandas数据帧中替换NaN值时遇到Python内存错误

时间:2017-06-01 05:14:14

标签: python pandas memory dataframe

我有一个非常大的pandas数据帧:~300,000列和~17,520行。 pandas数据帧称为result_full。我试图用numpy.nan替换所有字符串“NaN”:

result_full.replace(["NaN"], np.nan, inplace = True)

这是我得到的地方“MemoryError”是否有一种内存有效的方法来删除我的数据帧中的这些字符串?我尝试了result_full.dropna()但它没有用,因为它们在技术上是“NaN”字符串

1 个答案:

答案 0 :(得分:2)

其中一个问题可能是因为使用32位计算机,因为它一次最多可处理2GB数据。如果可能,请扩展到64位计算机以避免将来出现问题。

与此同时,可能会出现这种情况。使用df.to_csv()选项将数据框转换为CSV。完成后,如果您查看pandas documentation of read_csvdf.read_csv()的文档,您会注意到此参数

na_values : scalar, str, list-like, or dict, default None

Additional strings to recognize as NA/NaN. If dict passed, specific   per-column NA values. By default the following values are interpreted as NaN: ‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.

因此,它应该识别字符串' NaN'作为np.nan,您的问题将得到解决。

同时,如果您通过CSV直接创建此Dataframe,则可以使用此参数来避免内存问题。希望能帮助到你。 干杯!