如何使用 python 查找列中是否包含 DATE?

How to find if a column has DATE in it using python?

我是 DateTime、正则表达式的新手。所以,我有一个数据集,其中一列中有日期(It can have any format like shown below)。我想知道该列是否有日期。虽然输出错误,但我使用了正则表达式。如何处理?

我的代码:

df = 
   name  date
0  a     2020-01-23
1  c     01-24-2020
2  d     24-01-2020
3  e     2020/01/23
4  f     01/23/2020
5  r     23/01/2020
6  t     20200123
7  I     01232020
8  j     23012020

for i in df.date:
    for index, row in df.iterrows():
        if re.search("^([1-9] |1[0-9]| 2[0-9]|3[0-1])(.|-)([1-9] |1[0-2])(.|-|)20[0-9][0-9]$",str(df[i])) != None:
          print('Yes')
        else:
          print('No')

报错:

KeyError: '2020-01-23'

The above exception was the direct cause of the following exception:

我哪里错了?是regex的格式吗?

这是你本质上犯的一个关键错误

        if re.search("^([1-9] |1[0-9]| 2[0-9]|3[0-1])(.|-)([1-9] |1[0-2])(.|-|)20[0-9][0-9]$",str(df['2020-01-23'])) != None:

我想你是想做

        if re.search("^([1-9] |1[0-9]| 2[0-9]|3[0-1])(.|-)([1-9] |1[0-2])(.|-|)20[0-9][0-9]$",str(df[index])) != None:

然后变成:

        if re.search("^([1-9] |1[0-9]| 2[0-9]|3[0-1])(.|-)([1-9] |1[0-2])(.|-|)20[0-9][0-9]$",str(df[0])) != None:

我认为您想执行以下操作:

for i, row in df.iterrows():
    if re.search("your regex here", row.date) != None:
        print('Yes')
    else:
        print('No')

由于您已经在遍历行,因此您可以使用圆点表示法非常轻松地访问日期字段 row.date

附带说明一下,您可以在 for 循环之前编译您的正则表达式,这应该会稍微提高速度。此外,一旦您确定了逻辑,请考虑使用 df.apply() 而不是遍历每一行。

您好,我认为您可以使用以下代码将所有内容直接转换为日期格式。

$ df['date'] = pd.to_datetime(df['date']).apply(lambda x: x.date() if x else '')

以上代码将用实际日期填充日期列,并忽略那些空字符串。

您好,请检查下面的代码,它将有效字符串转换为日期,否则它将用 Nan 填充无效字符串。

from dateutil.parser import parse
import numpy as np

def check_date(x, fuzzy=False):
    try: 
        parse(str(x), fuzzy=fuzzy)
        return x
    except ValueError:
        return np.na

df['date'] = pd.to_datetime(df['date'].apply(lambda x: check_date(x)))

希望对你有用!!