将 JSON 数据从 Request 转换为 Pandas DataFrame

Posted

技术标签:

【中文标题】将 JSON 数据从 Request 转换为 Pandas DataFrame【英文标题】:Convert JSON data from Request into Pandas DataFrame 【发布时间】:2017-07-20 00:30:14 【问题描述】:

我正在尝试从网页中抓取一些数据并将其放入熊猫数据框中。我尝试并阅读了很多东西,但我无法得到我想要的东西。我想要一个数据框,其中所有数据都位于单独的列和行中。下面是我的代码。

import requests
import json
import pandas as pd
from pandas.io.json import json_normalize

r = requests.get('http://www.starcapital.de/test/Res_Stockmarketvaluation_FundamentalKZ_Tbl.php')

a = json.loads(r.text)

res = json_normalize(a)
##print(res)

df = pd.DataFrame(res)
print(df)

##df = pd.read_json(a)
##print(df)

pd.read_json(a) 似乎没有任何作用。有人可以试试吗?

提前感谢所有帮助。

最好的问候,大卫

【问题讨论】:

【参考方案1】:

或者,更简单地说:

import requests
import pandas as pd

r = requests.get('http://www.starcapital.de/test/Res_Stockmarketvaluation_FundamentalKZ_Tbl.php')

j = r.json()

df = pd.DataFrame.from_dict(j)

【讨论】:

这应该是正确的答案...谢谢。【参考方案2】:

你可以这样做:

import requests
import pandas as pd

r = requests.get('http://www.starcapital.de/test/Res_Stockmarketvaluation_FundamentalKZ_Tbl.php')

j = r.json()

df = pd.DataFrame([[d['v'] for d in x['c']] for x in j['rows']],
                  columns=[d['label'] for d in j['cols']])

结果:

In [217]: df
Out[217]:
                   Country  Weight  CAPE    PE    PC   PB   PS   DY  RS 26W  RS 52W  Score
0                   Russia     1.1   5.9   9.1   5.1  1.0  0.9  3.7    1.22    1.35    1.0
1                    China     1.1  12.8   7.2   4.5  0.9  0.6  4.2    1.05    1.13    2.0
2                    Italy     1.0  12.7  31.5   5.7  1.2  0.6  3.3    1.13    1.11    3.0
3                  Austria     0.2  14.3  21.7   7.3  1.1  0.7  2.5    1.10    1.15    4.0
4                   Norway     0.4  12.8  32.4   7.4  1.6  1.2  4.0    1.10    1.17    5.0
5                  Hungary     0.0  12.5  49.8   7.5  1.4  0.7  2.3    1.12    1.19    6.0
6                    Spain     1.2  11.7  24.7   7.0  1.4  1.2  3.7    1.08    1.11    7.0
7                    Czech     0.0   8.9  13.6   6.1  1.3  1.0  6.7    1.03    1.05    8.0
8                   Brazil     1.3   9.8  42.1   7.4  1.6  1.2  3.0    1.06    1.24    9.0
9                 Portugal     0.1  11.3  29.0   4.8  1.5  0.7  3.9    1.05    1.06   10.0
..                     ...     ...   ...   ...   ...  ...  ...  ...     ...     ...    ...
42        EMERGING MARKETS    13.5  14.0  16.0   8.8  1.6  1.3  2.9    1.04    1.11    NaN
43        DEVELOPED EUROPE    22.4  16.6  26.5   9.9  1.8  1.1  3.2    1.06    1.08    NaN
44         EMERGING EUROPE     1.7   8.6  10.9   5.8  1.1  0.8  3.4    1.13    1.20    NaN
45        EMERGING AMERICA     3.0  15.2  30.1   9.4  1.9  1.2  2.4    1.03    1.11    NaN
46  DEVELOPED ASIA-PACIFIC    17.7   NaN  17.7   8.8  1.3  0.9  2.5    1.03    1.09    NaN
47   EMERGING ASIA-PACIFIC     6.9  14.9  15.1   9.1  1.8  1.4  2.7    1.01    1.08    NaN
48         EMERGING AFRICA     0.8   NaN  16.5  10.6  2.0  1.4  3.8    1.06    1.12    NaN
49             MIDDLE EAST     1.3   NaN  13.7  11.8  1.5  1.8  3.9    1.06    1.10    NaN
50                    BRIC     5.9  11.8  14.6   7.4  1.4  1.2  2.7    1.06    1.16    NaN
51     OTHER EMERGING MKT.     2.5   NaN  17.7  12.9  1.8  1.5  3.1    1.16    1.20    NaN

[52 rows x 11 columns]

【讨论】:

这很好?? OMG :) 非常感谢!就像一个魅力......我永远不会得到这个,即使在一百万年后。谢谢! @DavidV,很高兴我能帮上忙 :-) 贾斯汀在下面的回答是更好的恕我直言。用这个解决方案遇到TypeError: list indices must be integers or slices, not str,而他的工作就像一个魅力。【参考方案3】:

而且比贾斯汀的(已经很有帮助的)回复简单了一步...通过将 .json() 放在 r = requests.get 行的末尾

import requests
import pandas as pd

r = requests.get('http://www.starcapital.de/test/Res_Stockmarketvaluation_FundamentalKZ_Tbl.php').json()

df = pd.DataFrame.from_dict(r)

【讨论】:

【参考方案4】:

这篇文章救了我From API to Pandas—Getting JSON Data With Python

【讨论】:

请为任何链接添加上下文,以便您的答案是独立的,这意味着答案需要在答案本身中。见"Provide context for links"。如果您可以在此处用自己的话回答问题并仅作为参考链接,那将是更好的选择。

以上是关于将 JSON 数据从 Request 转换为 Pandas DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

如何将json字符串转换为google.visualization.DataTable?

将json dict转换为pandas df中的行

Laravel,将 JSON 数组转换为数组,只从数组中获取一个对象

在 python/pymongo 中将 bson 转换为 json

Laravel 5:从 $request 中检索 JSON 数组

python json requests request 模块