簡體   English   中英

Pandas:如何根據每行包含 json 的列值創建新的 dataframe?

[英]Pandas: how to create a new dataframe depending on a column value containing json for each row?

我有一個像這樣的 dataframe:

artid  link     ner_label
1      url1     "{('blanqui', 'Person'): 6, ('walter benjamin', 'Person'): 2}"
2      url2     "{('john', 'Person'): 8, ('steven', 'Person'): 3}"

ner_label 每一行的類型都是字符串。 我想要這個:

artid   link     ner                label      score
    1   url1     'blanqui'         'Person'     6
    1   url1     'walter benjamin' 'Person'     2
    2   url2     'john'            'Person'     8
    2   url2     'steven'          'Person'     3   

我怎樣才能做到這一點? 我真的不知道該怎么做。

不是最有效的方法,但它會為您完成工作

from ast import literal_eval

df['ner'] = df['ner_label'].apply(lambda x: list(literal_eval(x).keys()))
df['score'] = df['ner_label'].apply(lambda x: list(literal_eval(x).values()))

df = df.set_index(['artid', 'link', 'ner_label']).apply(pd.Series.explode).reset_index()

df['label'] = [i[1] for i in df['ner']]
df['ner'] = [i[0] for i in df['ner']]
df.drop(['ner_label'], axis=1, inplace=True)

Output:

  artid     link    ner             score   label
0   1      url1     blanqui            6    Person
1   1      url1     walter benjamin    2    Person
2   2      url2     john               8    Person
3   2      url2     steven             3    Person

這是只有 pandas 的解決方案

df = df.assign(ner_label=df['ner_label'].str.split(', \(')).explode('ner_label')
df['ner_label']= df['ner_label'].str.replace('(','').str.replace('\)','').\
str.replace('\{','').str.replace('\}','').str.replace('\"','')

df[['ner','score']] = df.ner_label.str.split(':', expand=True)

df[['ner','label']] = df.ner.str.split(',', expand=True)

df.drop(columns='ner_label', inplace=True)

Output:

    artid   link    ner score   label
0   1   url1    'blanqui'   6   'Person'
0   1   url1    'walter benjamin'   2   'Person'
1   2   url2    'john'  8   'Person'
1   2   url2    'steven'    3   'Person'

暫無
暫無

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

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