【问题标题】:How to work around Python Pandas DataFrame's "Out of bounds nanosecond timestamp" error?如何解决 Python Pandas DataFrame 的“超出纳秒时间戳”错误?
【发布时间】:2018-10-20 06:36:17
【问题描述】:

以下代码引发“Out of bounds nanosecond timestamp: 1452-04-15 00:00:00 ”错误。如果我将日期字符串替换为一些最近的日期,例如 2017-01-01,则相同的代码可以工作。

df=pd.DataFrame({'Date':np.arange('1452-04-15', '1519-05-02', dtype='datetime64[D]')})

此示例代码用于提供一种重现错误的简单方法。我真正想要完成的是将包含非常早日期的 csv 读取到数据框中,并将字符串日期转换为 np.datetime64[D] 或任何可比较的日期格式。

【问题讨论】:

  • 投反对票的人能解释一下你为什么这么做吗?我不认为我的问题是重复的,而且我没有看到任何简单的方法可以将 [1677 年,2262 年] 之外的一系列日期字符串转换为类似日期时间的格式。

标签: python pandas date dataframe


【解决方案1】:

你需要period_range:

r = pd.period_range('1452-04-15', '1519-05-02')
print (r)
PeriodIndex(['1452-04-15', '1452-04-16', '1452-04-17', '1452-04-18',
             '1452-04-19', '1452-04-20', '1452-04-21', '1452-04-22',
             '1452-04-23', '1452-04-24',
             ...
             '1519-04-23', '1519-04-24', '1519-04-25', '1519-04-26',
             '1519-04-27', '1519-04-28', '1519-04-29', '1519-04-30',
             '1519-05-01', '1519-05-02'],
            dtype='period[D]', length=24488, freq='D')

df = pd.DataFrame({'Date' : r})
print (df.head())
        Date
0 1452-04-15
1 1452-04-16
2 1452-04-17
3 1452-04-18
4 1452-04-19

因为timestamp limitations:

In [66]: pd.Timestamp.min
Out[66]: Timestamp('1677-09-21 00:12:43.145225')

In [67]: pd.Timestamp.max
Out[67]: Timestamp('2262-04-11 23:47:16.854775807')

【讨论】:

  • 谢谢!是否有一个函数可以将一系列日期字符串转换为 Period,类似于 pd.to_datetime?
  • @Jimbo - 是否可以使用来自thisconv 函数?
  • 谢谢。这是一种方法。但是如果 pandas 没有提供任何方便的内置方法来进行这种转换,我会感到震惊。
  • @Jimbo - 尚未实施。我猜是因为datetimes 经常被使用,periods 最稀有。
  • 处理超出[1677年,2262年]范围的日期时间并不罕见?如果人们不使用period,他们会怎么做?
猜你喜欢
  • 1970-01-01
  • 2021-05-25
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 2021-03-15
  • 1970-01-01
  • 2019-08-01
相关资源
最近更新 更多