У меня большой набор данных в красном смещении (~ 3 миллиона строк и 1500 столбцов).В настоящее время я извлекаю все данные и выполняю некоторую обработку данных, например, вычисление пропущенных значений, создание макетов и т. Д. Я делаю это для каждого столбца, просматривая имена столбцов.Это занимает много памяти из-за размера данных, так как я сохраняю все данные в кадре данных до тех пор, пока обработка не будет завершена.
Я думаю о сохранении данных в CSV, а затем прочитать в каждом столбце, сделатьобработка данных и запись обработанного столбца в CSV.
Data
sv_m1 rev ioip dvr_m1 geo
0 15.31 40 0 NJN
0 64.9 0 0 CT
0 18.36 20 0 AX
0 62.85 0 0 AL
0 10.31 20 0 BS
0 12.84 10 13.95 MN
0 69.95 0 0 CT
0 32.81 20 13.95 FX
Так скажу, мой CSV, который имеет все данные: seg_data.csv
Я хочучтобы прочитать в первом столбце, выполнить обработку и записать ее в другой файл csv - final_seg.csv.Затем я хочу сделать то же самое для следующего столбца и следующего и аналогично для всех столбцов.Обработка данных может включать создание фиктивных переменных, если переменная является категориальной, например, geo.Я поддерживаю сопоставление имени и типа переменной в отдельном csv, который загружаю в dict (attribute_dict).
Ниже приведено то, что я делаю в настоящее время после чтения данных из БД и сохранения их в df_data_sample.
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
Таким образом, я не хочу хранить df_data_sample в памяти и загружать только один столбец за раз, обрабатывать его, записывать обработанный столбец (если числовой) и столбцы (фиктивные, если категоричный) в другой CSV.,Это должно происходить для всех столбцов.
Ожидаемый вывод csv
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
Я думаю, что, поскольку я храню только 1 столбец за раз в памяти, это уменьшит использование моей памяти (в настоящее время идетдо 75% на сервере).
Может кто-нибудь помочь мне с этим?