>我正在努力让一些 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