使用 python 从数据框中提取嵌套值

Extract nested values from data frame using python

我已经从 API 响应中提取数据并创建了一个字典函数:

def data_from_api(a):
    dictionary = dict(
    data = a['number']
    ,created_by = a['opened_by']
    ,assigned_to = a['assigned']
    ,closed_by = a['closed']
    )
    return dictionary

然后到 df(大约 1k 条记录):

raw_data = []
for k in data['resultsData']:
    records = data_from_api(k)
    raw_data.append(records)

我想创建一个函数来提取数据框中列中的嵌套字段 {display_value}。我只需要John Snow等名字,请看下面:

如何创建一个函数来提取那些字段的显示值?我试图创建类似的东西:

df = pd.DataFrame.from_records(raw_data)

def get_nested_fields(nested):
if isinstance(nested, dict):
    return nested['display_value']
else:
    return ''

df['created_by'] = df['opened_by'].apply(get_nested_fields)
df['assigned_to'] = df['assigned'].apply(get_nested_fields)
df['closed_by'] = df['closed'].apply(get_nested_fields)

但我收到一个错误:

KeyError: 'created_by'

你能帮帮我吗?

您可以像下面那样使用 .strget()。如果密钥不存在,它将写入 None.

df = pd.DataFrame({'data':[1234, 5678, 5656], 'created_by':[{'display_value':'John Snow', 'link':'a.com'}, {'display_value':'John Dow'}, {'my_value':'Jane Doe'}]})
df['author'] = df['created_by'].str.get('display_value')

输出

   data                                       created_by     author
0  1234  {'display_value': 'John Snow', 'link': 'a.com'}  John Snow
1  5678                    {'display_value': 'John Dow'}   John Dow
2  5656                         {'my_value': 'Jane Doe'}       None