从字典中有效地构建数据帧

add*_*ons 0 python dictionary dataframe python-2.7 pandas

我有大量的数据,我已经处理并生成了一个字典.现在我想从这本词典中创建一个数据框.字典的Vales是元组列表.从这些值我需要找出构建数据帧列的唯一值:

d = {'0001': [('skiing',0.789),('snow',0.65),('winter',0.56)],'0002': [('drama', 0.89),('comedy', 0.678),('action',-0.42) ('winter',-0.12),('kids',0.12)],'0003': [('action', 0.89),('funny', 0.58),('sports',0.12)],'0004': [('dark', 0.89),('Mystery', 0.678),('crime',0.12), ('adult',-0.423)],'0005': [('cartoon', -0.89),('comedy', 0.678),('action',0.12)],'0006': [('drama', -0.49),('funny', 0.378),('Suspense',0.12), ('Thriller',0.78)],'0007': [('dark', 0.79),('Mystery', 0.88),('crime',0.32), ('adult',-0.423)]}
Run Code Online (Sandbox Code Playgroud)

(字典大小接近800,000条记录)

我遍历字典以找出唯一的标题:

col_headers = []
entities = []
for key, scores in d.iteritems():
    entities.append(key)
    d[key] = dict(scores)
    col_headers.extend(d[key].keys())
col_headers = list(set(col_headers))
Run Code Online (Sandbox Code Playgroud)

我相信这需要很长时间才能完成.使用dict也可能是一个问题,因为它慢得多.当我通过raw构建数据框raw时,它进一步减慢了进程:

df = pd.DataFrame(columns=col_headers, index=entities)
for k in d:
    df.loc[k] = pd.Series(d[k])
df.fillna(0.0, axis=1)
Run Code Online (Sandbox Code Playgroud)

如何加快此过程以缩短处理时间?

Jon*_*ice 5

@ajcr几乎得到它.

但是您可能还需要将内部键值对解包到字典中.

df = pd.DataFrame.from_dict({ k: dict(v) for k,v in d.items() },  
                            orient="index").fillna(0)
Run Code Online (Sandbox Code Playgroud)

然后可选地,如果您想要使列标题的样式均匀化:

df.columns = [c.lower() for c in df.columns]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果你想完全疯狂,你可以对列进行排序:

df = df.sort(axis=1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述