【问题标题】:Convert JSON data from Request into Pandas DataFrame将 JSON 数据从 Request 转换为 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) 似乎没有任何作用。有人可以试试吗?

提前感谢所有帮助。

最好的问候,大卫

【问题讨论】:

    标签: python json pandas dataframe


    【解决方案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】:

      【讨论】:

      • 请为任何链接添加上下文,以便您的答案是独立的,这意味着答案需要在答案本身中。见"Provide context for links"。如果您可以在此处用自己的话回答问题并仅作为参考链接,那将是更好的选择。
      猜你喜欢
      • 2021-05-17
      • 2023-03-31
      • 2020-12-21
      • 2017-04-13
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多