如何放置' flat' json数据到python数据框?

时间:2015-09-16 20:11:26

标签: python json pandas

我正在发出API请求并获取我不确定如何处理的数据。我希望在pandas数据框中使用' channel_id'作为行(或我认为的索引)和所有其他信息作为列。

这是我的电话:

with requests.Session() as s:
    r1 = s.post(url_post,data=payload)
    r2 = s.get(url_get)

data = r2.json()

以下是数据的样子:

{u'value': {u'data': [{u'avg_revenue': u'0.006585714285714286',
u'avg_revenue_usd': u'0.006585714285714286',
u'channel_id': u'95622',
u'channel_name': u'game',
u'clicks': u'0',
u'coverage': u'6035',
u'cpi': u'0.006585714285714286',
u'cpi_usd': u'0.0066',
u'cpm': u'6.585714285714286',
u'cpm_usd': u'6.58570',
u'ctr': u'0.0000',
u'currency_code': u'USD',
u'ecpm': u'0.007598483599802209',
u'ecpm_usd': u'0.00760',
u'fill_rate': u'0.0012',
u'high_revenue': u'0.024',
u'high_revenue_usd': u'0.024000',
u'impressions': u'7',
u'low_revenue': u'0.0221',
u'low_revenue_usd': u'0.000000',
u'net_cpm': u'6.3692857142857140',
u'net_cpm_usd': u'6.36930',
u'payout': u'0.044585000000',
u'payout_usd': u'0.044585',
u'publisher_id': u'#######',
u'publisher_name': u'Agency',
u'queries': u'6067',
u'results': u'17561',
u'revenue': u'0.0461',
u'revenue_usd': u'0.0461'},
....
{u'avg_revenue': u'7.368266666666667',
u'avg_revenue_usd': u'7.368266666666667',
u'channel_id': u'122795',
u'channel_name': u'BT3',
u'clicks': u'26',
u'coverage': u'495022',
u'cpi': u'0.007470361608651572',
u'cpi_usd': u'0.0075',
u'cpm': u'7.470361608651572',
u'cpm_usd': u'7.47040',
u'ctr': u'0.0088',
u'currency_code': u'USD',
u'ecpm': u'0.01847035191331348',
u'ecpm_usd': u'0.01850',
u'fill_rate': u'0.0025',
u'high_revenue': u'22.1048',
u'high_revenue_usd': u'5.466700',
u'impressions': u'2959',
u'low_revenue': u'22.1048',
u'low_revenue_usd': u'0.000000',
u'net_cpm': u'7.0342510983440350',
u'net_cpm_usd': u'7.03430',
u'payout': u'20.814349000000',
u'payout_usd': u'20.814349',
u'publisher_id': u'#######',
u'publisher_name': u'Agency',
u'queries': u'1196772',
u'results': u'1425193',
u'revenue': u'22.1048',
u'revenue_usd': u'22.1048'}]}}

1 个答案:

答案 0 :(得分:1)

df = pd.DataFrame.from_dict(data['value']['data'])
df.set_index(['channel_id'], inplace=True)