从存储在Pandas数据框列中的JSON字符串中提取值

8cdiaqws  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(160)

我有一个panda Dataframe ,其中有一个名为 json2 的列,该列包含来自API调用的json字符串:
"{'obj': [{'timestp': '2022-12-03', 'followers': 281475, 'avg_likes_per_post': 7557, 'avg_comments_per_post': 182, 'avg_views_per_post': 57148, 'engagement_rate': 2.6848}, {'timestp': '2022-12-02', 'followers': 281475, 'avg_likes_per_post': 7557, 'avg_comments_per_post': 182, 'avg_views_per_post': 57148, 'engagement_rate': 2.6848}]}"
我想创建一个函数,该函数遍历列,并在 timestp 与给定日期匹配时提取 followers 的数量

def get_followers(x):
    if x['obj']['timestp']=='2022-12-03':
        return x['obj']['followers']

df['date'] = df['json2'].apply(get_followers)

我应该得到281475作为列 date 中的值,但我得到了一个错误:列表索引必须是整数或切片,而不是字符串
我做错了什么?先谢谢你

lrl1mhuk

lrl1mhuk1#

字典列表中出现名为obj的键。在定义另一个键之前,还必须指定列表元素的索引。

import ast
df['json2']=df['json2'].apply(ast.literal_eval) #if dictionary's type is string, convert to dictionary.

def get_followers(x):
    if x['obj'][0]['timestp']=='2022-12-03':
        return x['obj'][0]['followers']

df['date'] = df['json2'].apply(get_followers)

你也可以使用这个函数,它的作用和你正在使用的函数一样:

df['date'] = df['json2'].apply(lambda x: x['obj'][0]['followers'] if x['obj'][0]['timestp']=='2022-12-03' else None)

对于字典列表:

def get_followers(x):
    for i in x['obj']:
        if i['timestp'] == '2022-12-03':
            return i['followers']
            break
    
df['date'] = df['json2'].apply(get_followers)

相关问题