Создать Dask Dataframes из строк, представляющих многоуровневые словари - PullRequest
0 голосов
/ 08 марта 2019

У меня огромный массив данных, и я пытаюсь сделать dask-фреймы данных из списка строк

df_.head() * * 1004

A   |            B              |     C
----------------------------------------
1   | "{a:1, {b:2, c:3}, d:5}"  |     4
2   | "{a:5, {b:2, c:3}, d:0}"  |     7
...

Обратите внимание, что столбец c является строкой, поэтому я должен сделать literal_eval.

В пандах я сделал следующее:

import ast

for i in range(0,len(df_),1):
    df_.at[i,'B'] = ast.literal_eval(df_.iloc[i,2])

dat = pd.DataFrame()
for i in range(len(df_)):
#Makes the list of dicts into a dataframe
b = pd.DataFrame(df_.iloc[i,2])
#Keeps track of row number
b['A']=i
#Concat with master DF
dat=pd.concat([dat,b], axis=0, ignore_index=True)

Затем, после этого, я объединяю dat с исходным кадром данных (df_), основанным на столбце A.

Этот процесс занимает вечность, поэтому я хочу сделать это в сумерках.

Спасибо.

1 Ответ

0 голосов
/ 10 марта 2019

dat = pd.concat ([dat, b], axis = 0, ignore_index = True)

В этой строке вы неоднократно выделяете новый кадр данных Pandas увеличивающегося размера.Воссоздание вашего фрейма данных на каждой итерации, вероятно, очень и очень медленно.

Вместо этого вы можете попробовать использовать операцию Pandas, такую ​​как map или apply, чтобы выполнить эту операцию одновременно с вашим входным фреймом данных.

Возможно, вам здесь не нужен Dask.Лучше начать с более простых оптимизаций, подобных перечисленным выше, прежде чем вносить дополнительную сложность параллельных вычислений.

...