簡體   English   中英

從 Pandas 系列中的字典列表創建 DataFrame

[英]Create DataFrame from list of dicts in Pandas series

我有一個 Pandas 系列,每個“行”的字符串數據結構如下:

["[{'id': 240, 'name': 'travolta'}, {'id': 378, 'name': 'suleimani'}, {'id': 730, 'name': 'pearson'}, {'id': 1563, 'name': 'googenhaim'}, {'id': 1787, 'name': 'al_munir'}, {'id': 10183, 'name': 'googenhaim'}, {'id': 13072, 'name': 'vodkin'}]"]

當我使用標准解決方案獲取 DataFrame 時,我得到了:

> 0 [{'id': 240, 'name': 'travolta'}, {'id': 378, ...   
> 1 [{'id': 240, m'name': 'suleimani'}, {'id': 378,...

如何使用由dict鍵命名的列制作顯式DataFrame?

您可以使用 json 模塊加載該結構:

import json

data = ["[{'id': 240, 'name': 'travolta'}, {'id': 378, 'name': 'suleimani'}, {'id': 730, 'name': 'pearson'}, {'id': 1563, 'name': 'googenhaim'}, {'id': 1787, 'name': 'al_munir'}, {'id': 10183, 'name': 'googenhaim'}, {'id': 13072, 'name': 'vodkin'}]"]

data = ''.join(data).replace('\'', '"')
data = json.loads(data)
df = pd.DataFrame(data)

#print result df
#    id name
0   240 travolta
1   378 suleimani
2   730 pearson
3   1563    googenhaim
4   1787    al_munir
import pandas
import ast
spam = ["[{'id': 240, 'name': 'travolta'}, {'id': 378, 'name': 'suleimani'}, {'id': 730, 'name': 'pearson'}, {'id': 1563, 'name': 'googenhaim'}, {'id': 1787, 'name': 'al_munir'}, {'id': 10183, 'name': 'googenhaim'}, {'id': 13072, 'name': 'vodkin'}]"]
eggs = ast.literal_eval(spam[0])

df = pandas.DataFrame(eggs)
print(df)

輸出

      id        name
0    240    travolta
1    378   suleimani
2    730     pearson
3   1563  googenhaim
4   1787    al_munir
5  10183  googenhaim
6  13072      vodkin

正如我在評論中提到的,您沒有字典列表,而是單元素列表,其中元素是表示字典列表的字符串文字。

對於您的示例的輸入,您可以使用ast.literal_eval ,然后是主列表的扁平化lst ,如下所示:

import pandas as pd
import ast

lst = ["[{'id': 240, 'name': 'travolta'}, {'id': 378, 'name': 'suleimani'}, {'id': 730, 'name': 'pearson'}, {'id': 1563, 'name': 'googenhaim'}, {'id': 1787, 'name': 'al_munir'}, {'id': 10183, 'name': 'googenhaim'}, {'id': 13072, 'name': 'vodkin'}]"]

rows = [d for l in [ast.literal_eval(e) for e in lst] for d in l]

frame = pd.DataFrame(rows)
print(frame)

輸出

      id        name
0    240    travolta
1    378   suleimani
2    730     pearson
3   1563  googenhaim
4   1787    al_munir
5  10183  googenhaim
6  13072      vodkin

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM