【问题标题】:Pandas validate date format熊猫验证日期格式
【发布时间】:2018-09-01 06:59:02
【问题描述】:

有什么好方法可以验证数据框列中的所有项目是否具有有效的日期格式?

我的日期格式是11-Aug-2010

我看到了这个通用答案,其中:

try:
    datetime.datetime.strptime(date_text, '%Y-%m-%d')
except ValueError:
    raise ValueError("Incorrect data format, should be YYYY-MM-DD")

来源:https://stackoverflow.com/a/16870699/1374488

但我认为在我的情况下这并不好(有效)。

我假设我必须首先将字符串修改为熊猫日期,如此处所述: Convert string date time to pandas datetime

我是 Python 世界的新手,欢迎提出任何想法。

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    (从 piRSquared 的答案中借用的格式)

    if pd.to_datetime(df['date'], format='%d-%b-%Y', errors='coerce').notnull().all():
        # do something 
    

    这就是 LYBL——“三思而后行”的方法。这将返回 True 假设您所有的日期字符串都是有效的——这意味着它们都被转换为实际的 pd.Timestamp 对象。无效的日期字符串被强制转换为NaT,这是NaN 的日期时间等价物。

    或者,

    try:
        pd.to_datetime(df['date'], format='%d-%b-%Y', errors='raise')
        # do something
    except ValueError:
        pass
    

    这是 EAFP——“请求宽恕比许可更容易”方法,当遇到无效的日期字符串时会引发 ValueError

    【讨论】:

    • 如果'date' 列包含值1 会怎样?这不会在to_datetime 中引发错误,但可能无效。解决此问题的最佳方法是指定 format
    • 谢谢,我正在寻找 LYBL 方法!太好了!
    【解决方案2】:

    如果你知道你的格式,你可以使用布尔切片

    mask = pd.to_datetime(df.columns, format='%d-%b-%Y', errors='coerce').notna()
    df.loc[:, mask]
    

    考虑数据框df

    df = pd.DataFrame(1, range(1), ['11-Aug-2010', 'August2010, I think', 1])
    df
    
       11-Aug-2010  August2010, I think  1
    0            1                    1  1
    

    我可以过滤

    mask = pd.to_datetime(df.columns, format='%d-%b-%Y', errors='coerce').notna()
    df.loc[:, mask]
    
       11-Aug-2010
    0            1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2023-02-03
      相关资源
      最近更新 更多