首页 > 解决方案 > 检查 pandas 数据框日期列的日期格式是否正确?

问题描述

我有一个包含多列的数据框。其中一列具有格式日期(%m/%d/%Y)或具有空值。我必须进行检查以确保日期列包含正确格式的日期(如上所述)。

我想做的是:

pd.to_datetime(df['DOB'], format='%m/%d/%Y', errors='coerce').all(skipna=True)

检查它的日期格式是否正确,可以忽略空值,但我收到此错误,

TypeError: invalid_op() got an unexpected keyword argument 'skipna'

那么,请让我知道该怎么做或我可以应用哪些其他逻辑?

编辑 1:假设数据具有 3 个 DOB 和 1 个空值:

data = {"Name": ["James", "Alice", "Phil", "Jacob"], "DOB": ["07-01-1997", "06-02-1995", "", "03-07-2002"]}

修改 DOB 列以根据我的格式转换日期并用 NaN 替换空字段:

df['DOB']=pd.to_datetime(df['DOB']).apply(lambda cell: cell.strftime(DATE_IN_MDY) if not pd.isnull(cell) else np.nan)

在这种情况下,我希望结果为真。

标签: pythonpandasdataframe

解决方案


想法是比较空字符串或 ( |) 的缺失值Series.isna,然后通过参数errors='coerce'in比较可能添加的错误值to_datetime

data = {"Name": ["James", "Alice", "Phil", "Jacob"],
            "DOB": ["07-01-1997", "06-02-1995", "", "03-07-2002"]}

df = pd.DataFrame(data)

m1 = df['DOB'].eq('') | df['DOB'].isna()
m2 = pd.to_datetime(df['DOB'], errors='coerce').isna()

print (m1.eq(m2).all())
True

return 的示例False,因为日期时间错误:

data = {"Name": ["James", "Alice", "Phil", "Jacob"],
            "DOB": ["07-01-1997", "06-02-1995", "", "03-97-2002"]}

df = pd.DataFrame(data)

m1 = df['DOB'].eq('') | df['DOB'].isna()
m2 = pd.to_datetime(df['DOB'], errors='coerce').isna()

print (m1.eq(m2).all())
False

推荐阅读