2017-08-30 127 views
2

我从一个url中提取了JSON数据。结果是一本字典。如何转换此字典以便每个键都是列,并且时间戳是每行的索引 - 每次调用url时字典values对应于行条目?将json字典转换为熊猫行df

下面是数据:

with urllib.request.urlopen('https://api.blockchain.info/stats') as url: 
    block_data = json.loads(url.read().decode()) 

# Convert to Pandas 
block_df = pd.DataFrame(block_data) 

我想:

block_df = pd.DataFrame(block_data) 
block_df = pd.DataFrame(block_data, index = 'timestamp') 
block_df = pd.DataFrame.from_dict(block_data) 
block_df = pd.DataFrame.from_dict(block_data, orient = 'columns') 

但所有尝试给不同的错误:

ValueError: If using all scalar values, you must pass an index

TypeError: Index(...) must be called with a collection of some kind, 'timestamp' was passed

回答

1

裹在列表

pd.DataFrame([block_data]).set_index('timestamp') 

       blocks_size difficulty estimated_btc_sent estimated_transaction_volume_usd  hash_rate market_price_usd miners_revenue_btc miners_revenue_usd minutes_between_blocks n_blocks_mined n_blocks_total n_btc_mined n_tx nextretarget total_btc_sent total_fees_btc   totalbc trade_volume_btc trade_volume_usd 
timestamp                                                                                     
1504121943000 167692649 888171856257  24674767461479      1.130867e+09 7.505715e+09   4583.09    2540   11645247.85     7.92    170   482689 212500000000 281222  483839 174598204968248  41591624963 1653361250000000   43508.93  1.994054e+08 

随着datetime指数block_data

df = pd.DataFrame([block_data]).set_index('timestamp') 
df.index = pd.to_datetime(df.index, unit='ms') 
df 

        blocks_size difficulty estimated_btc_sent estimated_transaction_volume_usd  hash_rate market_price_usd miners_revenue_btc miners_revenue_usd minutes_between_blocks n_blocks_mined n_blocks_total n_btc_mined n_tx nextretarget total_btc_sent total_fees_btc   totalbc trade_volume_btc trade_volume_usd 
timestamp                                                                                      
2017-08-30 19:39:03 167692649 888171856257  24674767461479      1.130867e+09 7.505715e+09   4583.09    2540   11645247.85     7.92    170   482689 212500000000 281222  483839 174598204968248  41591624963 1653361250000000   43508.93  1.994054e+08 
+0

谢谢,这太棒了。还有一个问题 - 如何在设置后将unix timstamp索引转换为datetime? – zsad512

+0

我已更新我的帖子。 – piRSquared