我有大量数据,我已处理并生成字典。现在我想从这本词典中创建一个数据框。字典的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)
如何加快此过程以缩短处理时间?
答案 0 :(得分:5)
但是你可能还需要在整个过程中将内部键值对解包到字典中。
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]
如果你想完全疯狂,你可以对列进行排序:
df = df.sort(axis=1)