簡體   English   中英

從存儲在 pandas 數據框列中的 JSON 字符串中提取一個值

[英]Extract a value from a JSON string stored in a pandas data frame column

我有一個 pandas 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}]}"

我想制作一個 function 迭代該列並在timestp與給定日期匹配時提取關注者數量

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

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

我應該在日期列中得到 281475 作為值,但出現錯誤:“列表索引必須是整數或切片,而不是 str”

我做錯了什么? 先感謝您

名為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)

你也可以使用這個。 這與您正在使用的 function 的作用相同:

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)

暫無
暫無

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

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