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

时间:2015-03-16 20:22:58

标签: python python-2.7 dictionary pandas dataframe

我有大量数据,我已处理并生成字典。现在我想从这本词典中创建一个数据框。字典的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)]}

(字典的大小接近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))

我认为这需要很长时间才能完成。使用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)

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

1 个答案:

答案 0 :(得分:5)

@ajcr almost gets it.

但是你可能还需要在整个过程中将内部键值对解包到字典中。

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

然后可选地,如果你想使列标题的风格同质化:

df.columns = [c.lower() for c in df.columns]

enter image description here

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

df = df.sort(axis=1)

enter image description here