如何将包含字典列表的数据帧拆分为单独的数据帧列?



我有一个作为数据帧导入的 json 文件。其中一列包含字典列表。我需要将字典分成每行的单独列。

import urllib
import json
import requests
from pandas.io.json import json_normalize
f = requests.get(url)
data = json.loads(f.text)
docs = json_normalize(data['documents'])
display(docs)    

doc_num      sentence          categories
1         "I am a dog"      [{"id" : "A"}, {"id" : "B"}, {"id" : "C"}]
2         "I am a cat"      [{"id" : "C"}, {"id" : "D"}, {"id" : "E"}]
...            ...                                ...

我希望我的数据帧看起来像:

doc_num      sentence          cat_A    cat_B    cat_C    cat_D   ...
1         "I am a dog"        1        1        1        0
2         "I am a cat"        0        0        1        1
...            ...            ...      ...      ...      ...

我希望我的 DataFrame 将字典列表分成单独的列,其中该列如果属于该类别,则为"1",如果不属于该类别,则为"0"。

这可能会有所帮助。我认为代码是可以理解的,但如果您需要帮助,请告诉我。我测试了输出。


df = pd.DataFrame(data={'categories':[[{'id':'A'},{'id':'B'},{'id':'C'}],[{'id':'B'},{'id':'D'}],[{'id':'C',}]]})
all_keys = {}
def get_all_keys(x):
for d in x:
if d['id'] not in all_keys:
all_keys[d['id']] = 1
_,df['categories'].apply(get_all_keys)
for i,key in enumerate(all_keys.keys()):
all_keys[key] = i
mat = np.zeros((df.shape[0],len(all_keys.keys())),dtype=np.int)
print(mat.shape)
def f(i,x):
for d in x:
key = d['id']
key_index = all_keys[key]
mat[i][key_index]=1
for i,row in df.iterrows():
print(i,row)
f(i,row['categories'])
new_df = pd.DataFrame(data=mat,columns=all_keys.keys())
df = pd.concat([df,new_df],axis=1)

相关内容

最新更新