Pandas Concat遇到内存错误

时间:2019-04-18 06:56:14

标签: python pandas dataframe

我正在尝试预处理数据以进行进一步分析。首先,我要从csv文件(x)中读取数据。

然后我将其分为三个部分。最后,我需要使用get_dummiesconcatsum变换一个数组,以获得groupby的结果。

import pandas as pd

RawData_v2_clear=pd.read_csv('C:\\Users\\User\\Documents\\top200users_filtered.csv', 
        sep=';', usecols = ['Username', 'Code', 'Object'], error_bad_lines=False, 
        encoding='latin-1')

dfU = RawData_v2_clear['Username']              
dfT = RawData_v2_clear['Code']   
dfO = RawData_v2_clear['Object'] 

del RawData_v2_clear, dfO                               (to free up some memory)

df_newT = pd.concat([dfU,pd.get_dummies(dfT)],axis=1)

df_new_gbyT = df_newT.groupby('Username').sum()

Raw_Data_V2_clear具有形状(〜1100万行x 3列)。

Error:
  File "c:\Users\User\Desktop\Faulty_Skript.py", line XXX, in <module>
    df_newT = pd.concat([dfU,pd.get_dummies(dfT)],axis=1).sum()
  File "C:\Users\User\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", line 866, in get_dummies
    dtype=dtype)
  File "C:\Users\User\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", line 963, in _get_dummies_1d
    dummy_mat = np.eye(number_of_cols, dtype=dtype).take(codes, axis=0)
MemoryError

在另一个系统上,此操作需要一些时间,但没有Memory Error即可完成。也许有人有一个好主意来解决此内存问题?也许append比concat更便于存储?但是我在当前系统上执行append的操作也失败了。

非常感谢您!

1 个答案:

答案 0 :(得分:1)

IIUC,请尝试使用read_csv方法中的dtype='category'参数,而改为使用pandas.crosstab

import pandas as pd

RawData_v2_clear=pd.read_csv('C:\\Users\\User\\Documents\\top200users_filtered.csv', 
        sep=';', usecols = ['Username', 'Code', 'Object'], error_bad_lines=False, 
        encoding='latin-1', dtype='category')

df_new_gbyT = pd.crosstab(RawData_v2_clear.Username, RawData_v2_clear.Code)