Python-检测值/字符串列表是日期、时间、日期时间还是两者都不是
给定一个值或字符串列表,如何检测它们是日期、日期和时间,还是两者都不是 我曾使用pandas api推断数据类型,但它不能很好地处理日期。见示例:Python-检测值/字符串列表是日期、时间、日期时间还是两者都不是,python,python-3.x,pandas,csv,datetime,Python,Python 3.x,Pandas,Csv,Datetime,给定一个值或字符串列表,如何检测它们是日期、日期和时间,还是两者都不是 我曾使用pandas api推断数据类型,但它不能很好地处理日期。见示例: import pandas as pd def get_redshift_dtype(values): dtype = pd.api.types.infer_dtype(values) return dtype 这是我正在寻找的结果。对更好的方法有什么建议吗 # Should return "date" values_1 = ['
import pandas as pd
def get_redshift_dtype(values):
dtype = pd.api.types.infer_dtype(values)
return dtype
这是我正在寻找的结果。对更好的方法有什么建议吗
# Should return "date"
values_1 = ['2018-10-01', '2018-02-14', '2017-08-01']
# Should return "date"
values_2 = ['2018-10-01 00:00:00', '2018-02-14 00:00:00', '2017-08-01 00:00:00']
# Should return "datetime"
values_3 = ['2018-10-01 02:13:00', '2018-02-14 11:45:00', '2017-08-01 00:00:00']
# Should return "None"
values_4 = ['123098', '213408', '801231']
您可以编写函数,根据指定的条件返回值:
def return_date_type(s):
s_dt = pd.to_datetime(s, errors='coerce')
if s_dt.isnull().any():
return 'None'
elif s_dt.normalize().equals(s_dt):
return 'date'
return 'datetime'
return_date_type(values_1) # 'date'
return_date_type(values_2) # 'date'
return_date_type(values_3) # 'datetime'
return_date_type(values_4) # 'None'
您应该知道,Pandas
datetime
系列始终包含时间。在内部,它们被存储为整数,如果没有指定时间,它将被设置为00:00:00
,这里有一些东西可以准确地告诉您使用re
import re
classify_dict = {
'date': '^\d{4}(-\d{2}){2}$',
'date_again': '^\d{4}(-\d{2}){2} 00:00:00$',
'datetime': '^\d{4}(-\d{2}){2} \d{2}(:\d{2}){2}$',
}
def classify(mylist):
key = 'None'
for k, v in classify_dict.items():
if all([bool(re.match(v, e)) for e in mylist]):
key = k
break
if key == 'date_again':
key = 'date'
return key
classify(values_2)
>>> 'date'
检查是使用regex
迭代完成的,它尝试匹配列表中的所有项。只有当所有项目都匹配时,才会返回密钥。这适用于您给出的所有示例列表
目前,正则表达式字符串不检查特定范围以外的数字,例如(25:00:00),但实现起来相对简单