在python中,一次处理一个列,而不是将整个数据保存在内存中
我有一个大的数据集,红移约300万行和1500列。目前我正在提取所有数据并进行一些数据处理,如 缺少值插补和创建虚拟对象等。我通过循环列名在每一列上执行此操作。这会消耗大量内存,因为 数据大小,因为我将整个数据保存在一个数据帧中,直到处理完成 我正在考虑将数据存储在csv中,然后读取每一列,进行数据处理,并将处理后的列写入csv 资料 因此,假设我的csv包含所有数据:seg_data.csv 我想阅读第一列,进行处理并将其写入另一个csv-final_seg.csv。 然后我想对下一列和下一列做同样的操作,对所有列也做同样的操作。 如果变量是分类变量(如geo),则数据处理可能涉及创建虚拟对象。 我在单独的csv中维护变量名和类型的映射,并将其加载到dict属性中 下面是我从DB中读取数据并将其存储在df_data_sample中之后当前正在做的事情在python中,一次处理一个列,而不是将整个数据保存在内存中,python,pandas,csv,numpy,Python,Pandas,Csv,Numpy,我有一个大的数据集,红移约300万行和1500列。目前我正在提取所有数据并进行一些数据处理,如 缺少值插补和创建虚拟对象等。我通过循环列名在每一列上执行此操作。这会消耗大量内存,因为 数据大小,因为我将整个数据保存在一个数据帧中,直到处理完成 我正在考虑将数据存储在csv中,然后读取每一列,进行数据处理,并将处理后的列写入csv 资料 因此,假设我的csv包含所有数据:seg_data.csv 我想阅读第一列,进行处理并将其写入另一个csv-final_seg.csv。 然后我想对下一列和下一列
df_final = pd.DataFrame()
for column in df_data_sample.columns:
df_column = df_data_sample[[column]]
if (((attribute_dict[column] == 'CAT') & (df_column[column].unique().size < 100))==True):
df_target_attribute = pd.get_dummies(df_column[column], dummy_na=True, prefix=column)
df_target_attribute.fillna(0)
df_final[target_column] = df_target_attribute[[target_column]]
elif (attribute_dict[column] == 'NUM'):
#Let's impute with 0 for numeric variables:
df_target_attribute = df_column
df_target_attribute.fillna(value=0,inplace=True)
df_final[column] = df_target_attribute
我在想,由于我一次只在内存中保留一列,这将减少我的内存使用率。目前,服务器上的内存使用率为75%
有人能帮我吗?读取csv文件很慢,如果您的原始数据来自csv文件,您可以在chuck中读取csv文件,并使用to_hdf…,append=True将其附加到hdf5文件。然后按pd读取列。read_hdf…,columns=[…]。read_csv中的usecols参数将帮助您实现这一点。我这样做的方式是不断地反复加载数据的子集-
cols = ["sv_m1","rev","ioip","dvr_m1","geo_NJN","geo_CT","geo_AX","geo_BS"]
for col in cols:
df = pd.read_csv('sample.csv', usecols=[col])
print(df)
显然,您将使用该列进行处理,而不是printdf
您可以使用if/else来满足不同列的不同处理
希望有帮助
sv_m1 rev ioip dvr_m1 geo_NJN geo_CT geo_AX geo_BS
0 15.31 40 0 1 0 0 0
0 64.9 0 0 0 1 0 0
0 18.36 20 0 0 0 1 0
0 62.85 0 0 1 0 0 0
0 10.31 20 0 0 0 0 1
0 12.84 10 13.95 0 0 1 0
0 69.95 0 0 0 1 0 0
0 32.81 20 13.95 0 0 0 1
cols = ["sv_m1","rev","ioip","dvr_m1","geo_NJN","geo_CT","geo_AX","geo_BS"]
for col in cols:
df = pd.read_csv('sample.csv', usecols=[col])
print(df)