Python 如何使用Pandas从json格式获取数据?

Python 如何使用Pandas从json格式获取数据?,python,json,pandas,Python,Json,Pandas,我得到的json数据如下: "data": [ { "currency": "CNY", "standardDate": "2021-03-31T00:00:00+08:00", "reportDate": "2021-04-26T00:00:00+08:00",

我得到的json数据如下:

     "data": [
        {
          "currency": "CNY",
          "standardDate": "2021-03-31T00:00:00+08:00",
          "reportDate": "2021-04-26T00:00:00+08:00",
          "reportType": "first_quarterly_report",
          "q": {
            "ps": {
              "np": {
                "t": 773183901
              }
            }
          },
          "date": "2021-03-31T00:00:00+08:00",
          "stockCode": "300413"
        }
      ],
    "data":["Like Above"] many times
当我使用
pd.DataFrame获取df
时,列
'q'
值显示如下:

     q
     {'ps': {'np': {'t': 773183901}}} 
     {'ps': {'np': {'t': 773183901}}} 
     {'ps': {'np': {'t': 773183901}}} 
     {'ps': {'np': {'t': 773183901}}} 
我怎样才能巧妙地在
'q'
列中获得数字

    q
    773183901
    773183901
    773183901
    773183901

最好的方法是获得所需的列

df1 = pd.json_normalize(data, record_path=['q','ps','np'],  \
    meta=['currency','standardDate','reportDate','<All required fields>'])
df1=pd.json\u规范化(数据、记录路径=['q'、'ps'、'np']\
meta=[“货币”、“标准日期”、“报告日期”、“日期])

最好的方法是获取所需的列

df1 = pd.json_normalize(data, record_path=['q','ps','np'],  \
    meta=['currency','standardDate','reportDate','<All required fields>'])
df1=pd.json\u规范化(数据、记录路径=['q'、'ps'、'np']\
meta=[“货币”、“标准日期”、“报告日期”、“日期])

通过名称访问JSON/dict值的更直接的方法是使用
.str[]
访问器。如下所示,使用列
q
访问嵌套JSON深层的
t
值:

df['q'] = df['q'].str['ps'].str['np'].str['t']
演示
按名称访问JSON/dict值的更直接的方法是使用
.str[]
访问器。如下所示,使用列
q
访问嵌套JSON深层的
t
值:

df['q'] = df['q'].str['ps'].str['np'].str['t']
演示
也许
df['q']=df['q'].应用(lambda d:d['ps']['np']['t'])
?是的!它起作用了。非常感谢你。顺便问一下,为什么用“d”而不是“x”?在哪里可以找到一些东西来研究函数apply?在这种情况下,不需要将.apply()与lambda函数一起使用,只需使用
.str[]
。请参阅下面的详细信息。使用
“d”
而不是
“x”
没有特殊原因,如果您愿意,可以使用
“x”
。研究
.apply()
方法有很多参考资料,但是如果您可以使用其他内置函数,我建议您不要使用
.apply()
.apply()
与其他内置panda/numpy函数一样,lambda函数没有矢量化,也没有针对性能进行优化。因此,它通常是缓慢的。有关详细信息,请参见。可能
df['q']=df['q'].apply(lambda d:d['ps']['np']['t'])
?是!它起作用了。非常感谢你。顺便问一下,为什么用“d”而不是“x”?在哪里可以找到一些东西来研究函数apply?在这种情况下,不需要将.apply()与lambda函数一起使用,只需使用
.str[]
。请参阅下面的详细信息。使用
“d”
而不是
“x”
没有特殊原因,如果您愿意,可以使用
“x”
。研究
.apply()
方法有很多参考资料,但是如果您可以使用其他内置函数,我建议您不要使用
.apply()
.apply()
与其他内置panda/numpy函数一样,lambda函数没有矢量化,也没有针对性能进行优化。因此,它通常是缓慢的。详情请参见。酷,非常感谢。酷,非常感谢。