简体   繁体   中英

list of lists to pandas dataframe

I'm trying to parse a list of nested lists to a pandas dataframe.

This is a sample of the list:

>>>result[1]
{
    "account_currency": "BRL",
    "account_id": "1600343406676896",
    "account_name": "aaa",
    "buying_type": "AUCTION",
    "campaign_id": "aaa",
    "campaign_name": "aaaL",
    "canvas_avg_view_percent": "0",
    "canvas_avg_view_time": "0",
    "clicks": "1",
    "cost_per_total_action": "8.15",
    "cpm": "60.820896",
    "cpp": "61.278195",
    "date_start": "2017-10-08",
    "date_stop": "2017-10-15",
    "device_platform": "desktop",
    "frequency": "1.007519",
    "impression_device": "desktop",
    "impressions": "134",
    "inline_link_clicks": "1",
    "inline_post_engagement": "1",
    "objective": "CONVERSIONS",
    "outbound_clicks": [
        {
            "action_type": "outbound_click",
            "value": "1"
        }
    ],
    "platform_position": "feed",
    "publisher_platform": "facebook",
    "reach": "133",
    "social_clicks": "1",
    "social_impressions": "91",
    "social_reach": "90",
    "spend": "8.15",
    "total_action_value": "0",
    "total_actions": "1",
    "total_unique_actions": "1",
    "unique_actions": [
        {
            "action_type": "landing_page_view",
            "value": "1"
        },
        {
            "action_type": "link_click",
            "value": "1"
        },
        {
            "action_type": "page_engagement",
            "value": "1"
        },
        {
            "action_type": "post_engagement",
            "value": "1"
        }
    ],
    "unique_clicks": "1",
    "unique_inline_link_clicks": "1",
    "unique_outbound_clicks": [
        {
            "action_type": "outbound_click",
            "value": "1"
        }
    ],
    "unique_social_clicks": "1"
}

When I transform it to a pandas dataframe, I get:

>>>df = pd.DataFrame(result)
>>>df
....

 unique_actions  \
NaN   
[{u'value': u'1', u'action_type': u'landing_pa...   
NaN   
[{u'value': u'2', u'action_type': u'landing_pa...   
[{u'value': u'4', u'action_type': u'landing_pa...   
 NaN   

Unique actions and someother filter are not normalized.

How can I normalize it to the same granularity?

您可以使用json_normalize ,如下所示:

pd.io.json.json_normalize(df.unique_actions)

Consider json_normalize passing in your nested lists as the record_path and all other indicators as meta . However, because you have multiple nested lists, json carries information for three dataframes:

from pandas.io.json import json_normalize


merge_fields = ['account_currency', 'account_id', 'account_name', 'buying_type', 'campaign_id', 
                'campaign_name', 'canvas_avg_view_percent', 'canvas_avg_view_time', 'clicks', 
                'cost_per_total_action', 'cpm', 'cpp', 'date_start', 'date_stop', 'device_platform', 
                'frequency', 'impression_device', 'impressions', 'inline_link_clicks', 'inline_post_engagement', 
                'objective', 'platform_position', 'publisher_platform', 'reach', 'social_clicks', 'social_impressions', 
                'social_reach', 'spend', 'total_action_value', 'total_actions', 'total_unique_actions',
                'unique_clicks', 'unique_inline_link_clicks', 'unique_social_clicks']


unique_actions_df = json_normalize(result[1], record_path='unique_actions', meta=merge_fields)

outbound_clicks_df = json_normalize(result[1], record_path='outbound_clicks', meta=merge_fields)

unique_outbound_clicks_df = json_normalize(result[1], record_path='unique_outbound_clicks', meta=merge_fields)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM