【问题标题】:avoiding error from pd.to_datetime in pandas避免pd.to_datetime在pandas中的错误
【发布时间】:2016-08-10 02:59:59
【问题描述】:

我有一个超过 1 亿行的庞大数据框。我有一个日期列,不幸的是格式不正确(混合)的日期字符串。

现在我确实通过以下方式将其转换为日期时间:

df['TRX_DATE'] = pd.to_datetime(df['TRX_DATE'],coerce=True)
# without any error
# Now i want to calculate week day from that date columns
df['day_type'] = [x.strftime('%A') for x in d['TRX_DATE']]
###ValueError: month out of range

如果是单个字段,我可以使用 dateutil 解析器进行管理。但在这种情况下,我不知道该如何处理。

只是感兴趣,如果周转换线可以有类似的东西,如果任何东西超出范围放置一个默认值...

有这个想法,但作为一个新手。没有那么多经验来做这件事。

如果有人可以提供代码行来处理它,那将是非常有帮助的。

【问题讨论】:

    标签: python datetime pandas dataframe


    【解决方案1】:

    我认为您可以使用参数errors='coerce' 解析to_datetime,然后使用strftime 转换为weekday as locale’s full name

    print df
                  TRX_DATE  some value
    0  2010-08-15 13:00:00      27.065
    1  2010-08-16 13:10:00      25.610
    2  2010-08-17 02:30:00      17.000
    3  2010-06-18 02:40:00      17.015
    4  2010-18-19 02:50:00      16.910
    
    df['TRX_DATE'] = pd.to_datetime(df['TRX_DATE'],errors='coerce')
    
    df['day_type'] = df['TRX_DATE'].dt.strftime('%A')
    print df
                 TRX_DATE  some value day_type
    0 2010-08-15 13:00:00      27.065   Sunday
    1 2010-08-16 13:10:00      25.610   Monday
    2 2010-08-17 02:30:00      17.000  Tuesday
    3 2010-06-18 02:40:00      17.015   Friday
    4                 NaT      16.910      NaT
    

    【讨论】:

    • @jezrael- 已经尝试过了..得到相同的错误...我知道存在一些数据问题。但是从如此庞大的数据中识别缺陷对我来说很困难...所以需要避免无论如何都会出错
    • 您的pandas 是什么版本? print pd.show_versions()可以分享数据吗?
    • 嗯,但现在pandas 的最后一个版本是0.18.0。可以更新pandas吗?
    • Nat 是什么意思?
    【解决方案2】:
    [x.strftime('%A') for x in df['TRX_DATE'] if not isinstance(x, pandas.tslib.NaTType)]
    

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 2021-11-25
      • 2017-04-25
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多