我有一个庞大的数据集,我正在尝试从字符串列表中创建出dask数据框
align-middle
:
df_.head()
请注意,列c是字符串,因此我必须做A | B | C
----------------------------------------
1 | "{a:1, {b:2, c:3}, d:5}" | 4
2 | "{a:5, {b:2, c:3}, d:0}" | 7
...
。
在大熊猫中,我做了以下事情:
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)
与基于列A的原始数据帧(df_)合并。
此过程要花很长时间,所以我想尽快完成。
谢谢。
答案 0 :(得分:0)
dat = pd.concat([dat,b],axis = 0,ignore_index = True)
在这一行中,您反复分配一个新的Pandas数据框,该框的大小不断增加。每次迭代重新创建数据帧可能非常缓慢。
您可以尝试使用map
或apply
之类的Pandas操作一次对输入数据框执行此操作。
您可能不需要Dask。最好从上面列出的简单优化开始,然后再引入并行计算的额外复杂性。