Pandas.read_json(JSON_URL)

Sar*_*raz 3 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,}]}
Run Code Online (Sandbox Code Playgroud)

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

有没有其他方法可以做到这一点?什么是最好的方法,为什么?谢谢.

jez*_*ael 8

用途json_normalize:

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
Run Code Online (Sandbox Code Playgroud)

还在这里工作:

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
Run Code Online (Sandbox Code Playgroud)

对于DatetimeIndex转换列to_datetimeset_index:

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
Run Code Online (Sandbox Code Playgroud)

编辑:

负载数据解决方案:

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  
Run Code Online (Sandbox Code Playgroud)

另一种方案:

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  
Run Code Online (Sandbox Code Playgroud)


Ant*_*vBR 5

另一个解决方案,基于 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
Run Code Online (Sandbox Code Playgroud)