Pandas.read_json(JSON_URL)

时间:2017-10-05 04:58:03

标签: python json pandas

我正在使用Pandas从API获取数据。 API以JSON格式返回数据。然而,json在数据帧中有一些我不想要的值。由于这些值,我无法为数据框分配索引。以下是格式。

{
"Success": true,
"message": "",
"result": [{"id":12312312, "TimeStamp":"2017-10-04T17:39:53.92","Quantity":3.03046306,},{"id": 2342344, "TimeStamp":"2017-10-04T17:39:53.92","Quantity":3.03046306,}]}

我只对"结果感兴趣"部分。 一种方法是使用request.get(request_URL)导入json,然后在提取"结果"部分,将结果转换为数据帧。 第二种方法是导入数据Pandas.read_json(JSON_URL)将返回的数据帧转换回json,然后提取"结果" part,将结果转换为数据帧。

还有其他办法吗?什么是最好的方法,为什么?感谢。

2 个答案:

答案 0 :(得分:8)

使用Extracting token value from the response

from pandas.io.json import json_normalize

df = json_normalize(json['result'])
print (df)

   Quantity               TimeStamp        id
0  3.030463  2017-10-04T17:39:53.92  12312312
1  3.030463  2017-10-04T17:39:53.92   2342344

也在这里工作:

df = pd.DataFrame(d['result'])
print (df)
   Quantity               TimeStamp        id
0  3.030463  2017-10-04T17:39:53.92  12312312
1  3.030463  2017-10-04T17:39:53.92   2342344

DatetimeIndex转换列json_normalizeto_datetime

df['TimeStamp'] = pd.to_datetime(df['TimeStamp'])
df = df.set_index('TimeStamp')
print (df)

                         Quantity        id
TimeStamp                                  
2017-10-04 17:39:53.920  3.030463  12312312
2017-10-04 17:39:53.920  3.030463   2342344

编辑:

加载数据解决方案:

from urllib.request import urlopen
import json
from pandas.io.json import json_normalize

response = urlopen("https://bittrex.com/api/v1.1/public/getmarkethistory?market=BTC-ETC")
json_data = response.read().decode('utf-8', 'replace')

d = json.loads(json_data)
df = json_normalize(d['result'])
df['TimeStamp'] = pd.to_datetime(df['TimeStamp'])
df = df.set_index('TimeStamp')

print (df.head())
                          Quantity     Total  
TimeStamp                                     
2017-10-05 06:05:06.510   3.579201  0.010000  
2017-10-05 06:04:34.060  45.614760  0.127444  
2017-10-05 06:04:34.060   5.649898  0.015785  
2017-10-05 06:04:34.060   1.769847  0.004945  
2017-10-05 06:02:25.063   0.250000  0.000698  

另一种解决方案:

df = pd.read_json('https://bittrex.com/api/v1.1/public/getmarkethistory?market=BTC-ETC')
df = pd.DataFrame(df['result'].values.tolist())
df['TimeStamp'] = pd.to_datetime(df['TimeStamp'])
df = df.set_index('TimeStamp')
print (df.head())

                          Quantity     Total  
TimeStamp                                     
2017-10-05 06:11:25.100   5.620957  0.015704  
2017-10-05 06:11:11.427  22.853546  0.063851  
2017-10-05 06:10:30.600   6.999213  0.019555  
2017-10-05 06:10:29.163  20.000000  0.055878  
2017-10-05 06:10:29.163   0.806039  0.002252  

答案 1 :(得分:0)

另一种解决方案,基于jezrael使用请求:

import requests
import pandas as pd

d = requests.get("https://bittrex.com/api/v1.1/public/getmarkethistory?market=BTC-ETC").json()
df = pd.DataFrame.from_dict(d['result'])
df['TimeStamp'] = pd.to_datetime(df['TimeStamp'])
df = df.set_index('TimeStamp')

df