首页 > 解决方案 > 我无法正确地从 api 可视化 json 数据框

问题描述

我目前正在尝试从公共 API 读取一些数据。它有不同的读取方式(json、csv、txt等),只需更改url中的标签(/json、/csv、/txt ...)。网址如下:

https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01210PM/csv/ https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01210PM/json/ ...

我的问题是,当尝试导入 Pandas 数据框时,它没有正确读取数据。我正在尝试以下替代方案:

import pandas as pd
import requests

url = 'https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01210PM/json/'
r = requests.get(url)

rjson = r.json()

df= json_normalize(rjson)
df['periods']

在此处输入图像描述

我也尝试以 csv 格式读取数据:

import pandas as pd
import requests

url = 'https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01210PM/csv/'

collisions = pd.read_csv(url, sep='<br>')
collisions.head()

但是我没有得到好的结果;数据框无法正确显示,因为“周期”列与所有值分组......

输出显示如下:

在此处输入图像描述

所有数据显示为列:/

以下是如何正确显示数据的示例:

在此处输入图像描述

您建议尝试什么替代方案?

提前感谢您的时间和帮助!

我会注意你的回答,问候!

标签: pythonjsonpandasapicsv

解决方案


因为csv你可以StringIOio包中使用

In [20]: import requests

In [21]: res = requests.get("https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01210PM/csv/")

In [22]: import pandas as pd

In [23]: import io

In [24]: df = pd.read_csv(io.StringIO(res.text.strip().replace("<br>","\n")), engine='python')

In [25]: df
Out[25]:
   Mes/A&ntilde;o  Tipo de cambio - promedio del periodo (S/ por US$) - Bancario - Promedio
0        Jul.2018                                           3.276595
1        Ago.2018                                           3.288071
2        Sep.2018                                           3.311325
3        Oct.2018                                           3.333909
4        Nov.2018                                           3.374675
5        Dic.2018                                           3.364026
6        Ene.2019                                           3.343864
7        Feb.2019                                           3.321475
8        Mar.2019                                           3.304690
9        Abr.2019                                           3.303825
10       May.2019                                           3.332364
11       Jun.2019                                           3.325650
12       Jul.2019                                           3.290214
13       Ago.2019                                           3.377560
14       Sep.2019                                           3.357357
15       Oct.2019                                           3.359762
16       Nov.2019                                           3.371700
17       Dic.2019                                           3.355190
18       Ene.2020                                           3.327364
19       Feb.2020                                           3.390350
20       Mar.2020                                           3.491364
21       Abr.2020                                           3.397500
22       May.2020                                           3.421150
23       Jun.2020                                           3.470167

推荐阅读