【问题标题】:Converting dates when importing from CSV, OutOfBoundsDatetime: Out of bounds nanosecond timestamp. Pandas从 CSV 导入时转换日期,OutOfBoundsDatetime:超出范围纳秒时间戳。熊猫
【发布时间】:2020-07-24 13:45:16
【问题描述】:

我正在从 csv 导入数据,并尝试将特定日期设置为今天的日期。

如果以这种方式格式化,则 csv 中的数据:

该列中的所有数据都是日期并且格式完全相同。我现在用df = pd.read_csv(r'<filapath.csv>)读入了数据。

然后运行此命令以将“2020 年 7 月 21 日”的所有实例转换为今天的日期:

df['filedate'] = np.where(pd.to_datetime(df['filedate']) == '7/21/2020', pd.Timestamp('now').floor(freq='d'),df['filedate'])

我收到此错误:pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-14 00:00:00

我不想使用errors='coerce',因为该列将始终 100% 填充真实日期,并且稍后我需要按日期过滤数据框。我看不到的 csv 数据中似乎有一些“幽灵”精度。在这种情况下,我无法修改 csv 列,也无法使用 pandas 和 numpy 之外的任何包。

【问题讨论】:

  • 您是否发现 csv 中的哪一行导致了错误?除了我建议尝试.loc 之外,我似乎无法使用您发布的示例中的某些日期字符串重现错误。
  • 每一行都可能导致错误。这是令人费解的部分!例如,如果我复制列并填充我自己的日期,格式与列中自动填充的日期完全相同,我的代码就可以正常工作。我认为单元格中隐藏了一些幽灵格式(不知道还能叫什么)。
  • 您是否检查过如果将列预先转换为 datetime df['filedate'] = pd.to_datetime(df['filedate']) 会发生什么?

标签: python pandas numpy datetime date-formatting


【解决方案1】:

...或者.loc:

df.loc[df['filedate'] == '7/21/2020', 'filedate'] = pd.Timestamp('now').floor(freq='d')

【讨论】:

    【解决方案2】:

    使用 .replace() 函数。

    df['filedate'].replace({'7/21/2020':pd.Timestamp('now').floor(freq='d')})
    

    【讨论】:

    • 应该注意,这必须在将列转换为日期时间之前应用,即当它仍然是 dtype 对象/字符串时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2019-06-16
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多