首页 > 解决方案 > 返回列中的值不是日期类型的数据框行

问题描述

我有一个df看起来像这样的数据框:

 Name   Date of birth
  Bob   
Steve      22/07/1963
   Jo          pencil
Karen      03/02/1953
Frank      29/09/1994

有没有办法返回Date of birth不是日期的行?

在上面的示例中,我会返回:

 Name   Date of birth
  Bob   
   Jo          pencil

哪里Date of birth不是日期。

我可以使用以下方法确定出生日期的空白值在哪里:

missingDoBError = df.loc[df['Date of birth'].isnull()]

我试图找到出生日期值,其中值不是设置为 NaT 的日期格式,方法是使用:

if pd.to_datetime(df['Date of birth'], format='%d-%b-%Y', errors='coerce').notnull().all():

但我无法让它工作。

标签: pythonpandas

解决方案


我相信您需要更改格式%d/%m/%Y并测试缺失值:

m2 = pd.to_datetime(df['Date of birth'], format='%d/%m/%Y', errors='coerce').isnull()
#or skip parameter format if performance is not important
#m2 = pd.to_datetime(df['Date of birth'], errors='coerce').isnull()

df = df[m2]
print (df)
  Name Date of birth
0  Bob           NaN
2   Jo        pencil

如果要省略s 行,则使用按位( )NaN链接另一个布尔掩码以测试不缺失值:AND&

m1 = df['Date of birth'].notnull()
m2 = pd.to_datetime(df['Date of birth'], format='%d/%m/%Y', errors='coerce').isnull()

df = df[m1 & m2]
print (df)
  Name Date of birth
2   Jo        pencil

推荐阅读