【问题标题】:How to silently ignore datetime parse failures?如何默默地忽略日期时间解析失败?
【发布时间】:2018-10-03 12:19:04
【问题描述】:

Here 是我的错误截图。

Trans_Imp_Date 值未能转换为 pandas 日期时间格式 (yyyy-mm-dd)。但是,其他两列的过程运行良好。

我希望这样,如果特定行的转换为日期时间过程失败,pandas 会忽略该特定行并输出输入而不进行转换(根据错误 = 'ignore' 标志),然后继续转换其余的行。我怎样才能做到这一点?

【问题讨论】:

  • 据我所知,您无法让 Pandas 在失败时忽略坏单元。您需要检查它们并删除或替换它们。
  • 好的,谢谢,我会尝试解决它。我认为错误=忽略应该忽略坏单元格:错误:{'ignore','raise','coerce'},默认'raise'如果'raise',那么无效解析将引发异常如果'coerce',则无效解析将被设置为 NaT 如果'ignore',则无效解析将返回输入

标签: python pandas datetime


【解决方案1】:

使用copy

如果您稍后通过函数 to_datetime 修改 df_p 中的值,您会发现修改不会传播回原始数据 (p_junjul_trans_orig),并且 Pandas 会发出警告。

cols = ['Imp_Trans_Date','Trans_Imp_Date','Imposition_Date_of_Hearing']
df_p = p_junjul_trans_orig[cols].copy()

编辑:

数据似乎有些问题,例如跟踪空格,可以通过以下方式检查:

print (df_p['Trans_Imp_Date'].head().tolist())

【讨论】:

  • 在这个阶段我不想修改原始数据(p_junjul_trans_orig),我想保持原样。我想修改“df_p”中的“Trans_Imp_Date”列。
  • @Falc - 嗯,所以它只失败了一列?如果评论它,没有错误? chained assignments 应该有问题,但我想它应该对每个 to_datetime 发出警告
  • 是的,那一列失败了,我的所有输出都包含在屏幕截图中。
  • @Falc - 我现在明白了,检查编辑的答案。顺便说一句,为什么不使用 errors='coerce' 参数将不可解析的值转换为 NaT
  • print (df_p['Trans_Imp_Date'].head().tolist()) 给出输出: ['25/06/2018', '25/06/2018', '20/06 /2018'、'20/06/2018'、'20/06/2018']。我不想使用强制,因为那样我就失去了以前的价值。
猜你喜欢
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多