Python 从Dataframe中的JSON列中提取特定值

Python 从Dataframe中的JSON列中提取特定值,python,json,pandas,Python,Json,Pandas,首先,我将json转换为数据帧 ad_data = '{ "data":[ { "impressions":"11111", "spend":"123", "conversions":[ { "action_type":"s

首先,我将json转换为数据帧

ad_data = '{
   "data":[
      {
         "impressions":"11111",
         "spend":"123",
         "conversions":[
            {
               "action_type":"start_trial_total",
               "value":"6"
            },
            {
               "action_type":"subscribe_mobile_app",
               "value":"3"
            }
         ],
         "outbound_clicks_ctr":[
            {
               "action_type":"outbound_click",
               "value":"1.869306"
            }
         ],
         "date_start":"2020-01-23",
         "date_stop":"2020-01-23"
      },
      {
         "impressions":"22222",
         "spend":"321",
            {
               "action_type":"start_trial_total",
               "value":"6"
            }
         ],
         "outbound_clicks_ctr":[
            {
               "action_type":"outbound_click",
               "value":"2.328902"
            }
         ],
         "date_start":"2020-01-24",
         "date_stop":"2020-01-24"
      }
   ]
}'

df = pd.DataFrame(ad_data['data'])

所以我得到了数据帧

ad_data = '{
   "data":[
      {
         "impressions":"11111",
         "spend":"123",
         "conversions":[
            {
               "action_type":"start_trial_total",
               "value":"6"
            },
            {
               "action_type":"subscribe_mobile_app",
               "value":"3"
            }
         ],
         "outbound_clicks_ctr":[
            {
               "action_type":"outbound_click",
               "value":"1.869306"
            }
         ],
         "date_start":"2020-01-23",
         "date_stop":"2020-01-23"
      },
      {
         "impressions":"22222",
         "spend":"321",
            {
               "action_type":"start_trial_total",
               "value":"6"
            }
         ],
         "outbound_clicks_ctr":[
            {
               "action_type":"outbound_click",
               "value":"2.328902"
            }
         ],
         "date_start":"2020-01-24",
         "date_stop":"2020-01-24"
      }
   ]
}'

df = pd.DataFrame(ad_data['data'])

印象 花费 转换 出站点击次数 开始日期 停车日期 11111 123 [{'action_type':'start_trial_total','value':'6'},{'action_type':'subscribe_mobile_app','value':'3'}] [{'action\u type':'outbound\u click','value':'1。。。 2020-01-23 2021-01-23 22222 312 [{'action\u type':'start\u trial\u total','value':'6'}] [{'action\u type':'outbound\u click','value':'1。。。 2020-01-24 2020-01-24 ... ... ... ... ... ... 尝试:


因为数据框的
conversions
列包含要在其上操作的词典列表。 您可以创建一个单独的函数,该函数可以接受这些列表作为参数,然后在这些列表中的词典中进行检查(如果其中有
subscribe\u mobile\u app
),然后相应地返回值:

def subscribe_mobile_app_values(lst):
     val = 0
     for i in lst:
         if i["action_type"] == "subscribe_mobile_app":
             val = i["value"]
             break
     return val
然后将此函数应用于数据帧中的conversions列:

df['conversions'] = df['conversions'].apply(subscribe_mobile_app_values)

它返回错误:ValueError:格式错误的节点或字符串:[{'action\u type':'start\u trial\u total','value':'6'},{'action\u type':'subscribe\u mobile\u app','value':'3'},在没有ast.literal的情况下尝试一次。literal\u eval没有ast.literal\u eval效果很好,谢谢!据我所知,你想要一个函数,可以返回你提到的动作类型的值?@mrdaf你是否想根据你之前的评论改进
订阅移动应用程序的值
功能,现在似乎已经删除了。只是检查你在回答这个问题时是否需要更多的帮助,或者它是否解决了你的问题?