我有一个包含多列的数据框。列之一的日期格式为(%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)
在这种情况下,我希望结果为真。
答案 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