python - 检查 pandas 数据框日期列的日期格式是否正确?

标签 python pandas dataframe

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

我想做的是:

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 = {"姓名": ["詹姆斯", "爱丽丝", "菲尔", "雅各布"], “出生日期”:[“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)

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

最佳答案

想法是通过 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

关于python - 检查 pandas 数据框日期列的日期格式是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59499348/

相关文章:

python - 如何让 get_dummies 工作到位?

python-3.x - 在数据框中包含使用 MAP 和字典的列

python - 实现 cdc 但在 Python Pandas 中出现值错误

python - 将一年中的几周分开并计算数据框中的平均值

python - 将 pandas concat 的数据帧转换为多索引

python - 在 matplotlib 轴上设置科学限制后调整指数文本

r - 按类别计算列的加权中位数 (matrixStats)

python - 组合元组列表

python - 如何有效地识别 pandas 数据框中的字符串并对其进行分类?

python - 基于python中的变量类型处理数据子集