python - 检查 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)
在这种情况下,我希望结果为真。
解决方案
想法是比较空字符串或 ( |
) 的缺失值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
推荐阅读
- python - 如何将具有多种语言的数据框列翻译成英语而不得到:HTTP 错误 429:请求过多
- bash - Bash:无法从管道读取
- javascript - ReactJS 中名称的下拉列表
- c++ - 使用布尔值验证整数输入
- reactjs - 在 JHipster 中使用货币字段
- rust - 在实现返回可变引用的迭代器时,如何解决“无法为 autoref 推断适当的生命周期”?
- python - 如何让我的按钮增加我的迭代值并在网站上显示效果?(django)
- javascript - 如何在 mat-select 的两行中显示数据?
- java - 我对 firebase 和 imageView 有疑问
- ajax - 如何使用 Leaflet 中的 AJAX 调用更改从 GeoJSON 中获取的线条的样式?