检查pandas dataframe date列的日期格式是否正确?

时间:2019-12-27 10:29:24

标签: python pandas dataframe

我有一个包含多列的数据框。列之一的日期格式为(%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)

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

1 个答案:

答案 0 :(得分:1)

Series.isna比较空字符串或(|)是否缺少值,然后用to_datetime中的参数errors='coerce'比较可能的添加错误值的想法:

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

由于错误的日期时间,返回样本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