如何使用 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)))
希望对你有用!!
我是 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)))
希望对你有用!!