У меня есть функция, которая обрабатывает DataFrame, в основном для обработки данных в ковши, создает двоичную матрицу функций в определенном столбце, используя pd.get_dummies(df[col])
.
Чтобы не обрабатывать все мои данные с помощью этой функции сразу (что выходит из памяти и приводит к сбою iPython), я разбил большой DataFrame на куски, используя:
chunks = (len(df) / 10000) + 1
df_list = np.array_split(df, chunks)
pd.get_dummies(df)
будет автоматически создавать новые столбцы на основе содержимого df[col]
, и они могут различаться для каждого df
в df_list
.
После обработки я объединим DataFrames обратно, используя:
for i, df_chunk in enumerate(df_list):
print "chunk", i
[x, y] = preprocess_data(df_chunk)
super_x = pd.concat([super_x, x], axis=0)
super_y = pd.concat([super_y, y], axis=0)
print datetime.datetime.utcnow()
Время обработки первого блока вполне приемлемо, однако оно растет за кусок! Это не связано с preprocess_data(df_chunk)
, поскольку нет причин для его увеличения. Является ли это увеличением времени, возникающего в результате вызова pd.concat()
?
См. журнал ниже:
chunks 6
chunk 0
2016-04-08 00:22:17.728849
chunk 1
2016-04-08 00:22:42.387693
chunk 2
2016-04-08 00:23:43.124381
chunk 3
2016-04-08 00:25:30.249369
chunk 4
2016-04-08 00:28:11.922305
chunk 5
2016-04-08 00:32:00.357365
Есть ли способ обгонять это? У меня 2900 кусков для обработки, поэтому любая помощь приветствуется!
Откройте любые другие предложения в Python!