У меня есть фрейм данных с 2,5 миллионами строк и более 7000 столбцов (все категориальные).
Я перебираю каждый столбец, подставляю переменные, выполняю некоторую обработку и объединяюсь в окончательный кадр данных.
Код ниже:
cat_count = 0
df_final = pd.DataFrame()
for each_col in cat_cols:
df_temp = pd.DataFrame()
df_single_col_data = df_data[[each_col]]
cat_count += 1
# Calculate uniques and nulls in each column to display in log file.
uniques_in_column = len(df_single_col_data[each_col].unique())
nulls_in_column = df_single_col_data.isnull().sum()
print('%s has %s unique values and %s null values' %(each_col,uniques_in_column,nulls_in_column[0]))
#Convert into dummies
df_categorical_attribute = pd.get_dummies(df_single_col_data[each_col].astype(str), dummy_na=True, prefix=each_col)
df_categorical_attribute = df_categorical_attribute.loc[:, df_categorical_attribute.var() != 0.0]# Drop columns with 0 variance.
#//// Some data processing code://///
df_final = pd.concat([df_final,df_categorical_attribute],axis = 1)
print ('*'*10 + "\n Variable number %s processed!" %(cat_count))
# Write the final dataframe to a csv
df_final.to_csv('cat_processed.csv')
Однако для таких больших данных df_final увеличивает до 75% памяти на сервере, и я хотел бы уменьшить объем памяти этого фрагмента кода.
Итак, я думаю, что обработаю до 300-го столбца, запишу результаты в csv. Затем снова обработайте следующие 300 столбцов, откройте CSV, напишите в него и закройте.
Таким образом, df_final одновременно будет содержать результаты только 300 столбцов.
Может кто-нибудь, пожалуйста, помогите мне с этим?
Или, если есть какой-то лучший способ решить эту проблему, я бы тоже хотел это реализовать.
Ниже приведен пример данных для репликации:
df_data
rev_m1_Transform ov_m1_Transform ana_m1_Transform oov_m1_Transform
0_to_12.95 34.95_to_846.4 65_to_74.95 64.9_to_1239.51
13.95_to_116.55 14.95_to_19.95 45.05_to_60.05 34.9_to_39.95
12.95_to_13.95 19.95_to_29.95 89.95_to_9491.36 54.95_to_59.95
0_to_12.95 0_to_14.95 0_to_29.949999 64.9_to_1239.51
0_to_12.95 19.95_to_29.95 74.95_to_83.9 54.95_to_59.95
0_to_12.95 0_to_14.95 0_to_29.9499 0_to_34.9
0_to_12.95 14.95_to_19.95 45.05_to_60.05 39.95_to_44.9
0_to_12.95 0_to_14.95 0_to_29.949 0_to_34.9
0_to_12.95 19.95_to_29.95 89.95_to_9491.36 54.95_to_59.95
cat_cols - это список со всеми именами столбцов в df_data.
Спасибо