【问题标题】:Pandas DataFrame datetime index doesn't survive JSON conversion and reconversionPandas DataFrame 日期时间索引无法在 JSON 转换和重新转换中存活
【发布时间】:2014-10-16 18:47:30
【问题描述】:

我有以下 Python 代码的 sn-p:

import pandas as pd

# print normal index
print data.index

# convert from df to JSON and back
data_json = data.to_json()
df = pd.read_json(data_json)
df.index = pd.to_datetime(df.index)
print df.index

由于某种原因,运行返回:

<class 'pandas.tseries.index.DatetimeIndex'>
[1950-01-03 00:00:00, ..., 2014-08-21 00:00:00]
Length: 16264, Freq: None, Timezone: None
<class 'pandas.tseries.index.DatetimeIndex'>
[1966-10-31 00:00:00, ..., 2001-09-07 00:00:00]
Length: 16264, Freq: None, Timezone: None

有人可以向我解释发生了什么以及如何让索引在转换过程中保持不变吗?

【问题讨论】:

  • 你能发布一些失败的示例数据吗?在一个假人集上它对我有用。您还应该注意版本。
  • print sys.version print pd.__version__ 2.7.5 |Anaconda 1.8.0 (64-bit)| (默认,2013 年 11 月 4 日,15:30:26) [GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] 0.12.0 数据为:data = Quandl.get("YAHOO/INDEX_GSPC", trim_start= "1950-01-03", trim_end="2014-08-21")
  • 通过将 pandas 升级到 0.14.1 并在 to_json() 调用中指定 date_format='iso' 来修复它。

标签: python json datetime pandas


【解决方案1】:

这里的错误是to_json默认以毫秒分辨率保存日期,而to_datetime默认转换为纳秒分辨率。要解决这个问题,其中任何一个(但不是两个!)都可以。

pd.to_datetime(df.index, unit='ms')
#OR
data_json = data.to_json(date_unit='ns')

如 cmets 中所述,您也可以将带有日期的 json 保存为 iso 格式。

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 2018-10-30
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2017-07-11
    相关资源
    最近更新 更多