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