缺少使用 python 的 json 信息



>我正在努力让一些 json 信息出现在数据帧列中

信息'data_at': 1619293080600

这是我到目前为止所拥有的:

requestT = requests.get('https:............)
json_dataT = json.loads(requestT.text)
print(json_dataT)

输出:

{'data_at': 1619293080600, 'data': {'london_NW': {'loc_postcode': 'NW1', 'loc_name': 'camden_twn', 'ave_price': '1061227.00'}, 'london_SW': {'loc_postcode': 'SW1', 'loc_name': 'victoria', 'ave_price': '1878130.00'}}}

然后,我通过以下方法将其转换为数据帧:

df = pd.DataFrame(json_dataT)
dfNormal = json_normalize(df['data'])

但是,我丢失了"data_at"信息,这是我想要的时间戳 0.我得到的是以下内容:

loc_postcode          loc_name              ave_price
0                NW1        camden_twn             1061227.00
1                SW1          victoria             1878130.00

如何让"data_at"(时间戳)显示为第一列?

获得所需结果的一种方法是"规范化"json_dataT,因为所需结果中不存在json_dataT['data'].keys()

具体来说,"下降"带有json_dataT['data'].keys()的级别:

>>> json_dataT['data'] = list(json_dataT['data'].values())  

然后,应用json_normalize以获取数据帧:

>>> df_normal = json_normalize(json_dataT, record_path='data', meta='data_at')
>>> df_normal
loc_postcode    loc_name   ave_price        data_at
0          NW1  camden_twn  1061227.00  1619293080600
1          SW1    victoria  1878130.00  1619293080600

最后,对列重新排序,使data_at成为第一列:

>>> cols = df_normal.columns.tolist()
>>> cols = cols[-1:] + cols[:-1]
>>> df_normal = df_normal[cols]
>>> df_normal
data_at loc_postcode    loc_name   ave_price
0  1619293080600          NW1  camden_twn  1061227.00
1  1619293080600          SW1    victoria  1878130.00

由于df的构造方式,索引将与.json_normalize()操作的结果不匹配 - 它将是:Index(['london_NW', 'london_SW'], dtype='object').
要解决此问题,您可以使用.reset_index(),然后与pd.concat()axis=1水平连接:

df.reset_index(drop=True,inplace=True)
df_normal = pd.concat([df['data_at'],pd.json_normalize(df['data'])],axis=1)

结果:

In [63]: df_normal
Out[63]: 
data_at loc_postcode    loc_name   ave_price
0  1619293080600          NW1  camden_twn  1061227.00
1  1619293080600          SW1    victoria  1878130.00

最新更新