如何通过pandas dataframe中的sort_values函数将pd.to_datetime转换为JSON?

时间:2018-04-06 05:06:22

标签: json pandas

我有一个包含datetime对象的pandas数据框,当我使用sort_values对值进行排序时,它会进入正确的dateformat但是当我转换为JSON时,它会带有一些其他格式 Date":1404777600000 我使用 pd.to_datetime() 进行转化

bot5 = data.sort_values('Amount',ascending=True)[['Time','Region','Amount','Class']].tail(N).reset_index() 
print(bot5.to_json(orient='records'))
  

[{ “日期”:1404777600000 “金额”:25691.16, “地区”: “南”},{ “日期”:1418083200000 “金额”:19656.53, “地区”: “南”},

1 个答案:

答案 0 :(得分:0)

来自pandas文档:

  

日期转换类型。 epoch = epoch毫秒,iso = ISO8601。默认值取决于方向。对于orient ='table',默认为'iso'。对于所有其他方位,默认为'epoch'。

您正在使用records orient,因此,默认情况下,pandas会将您的日期转换为纪元日期。您可以通过传递参数iso

将日期转换类型更改为date_format='iso'
df = pd.DataFrame({
    'year': [2015, 2016],
    'month': [2, 3],
    'day': [4, 5], 
    'Amount': [25691.16, 19656.53], 
    'Region': ['south', 'south']
})

df['Date'] = pd.to_datetime(df[['year', 'month', 'day']])
(df[['Date', 'Amount', 'Region']]
    .sort_values('Amount', ascending=True)
    .to_json(orient='records', date_format='iso', date_unit='ns'))
# '[{"Date":"2016-03-05T00:00:00.000000000Z","Amount":19656.53,"Region":"south"},
#   {"Date":"2015-02-04T00:00:00.000000000Z","Amount":25691.16,"Region":"south"}]'

默认情况下,还有一个问题to_datetime转换为纳秒分辨率,但默认情况下to_jsonms分辨率保存日期,因此您需要传递正确的date_unit参数(date_unit='ns')也是。