文章目录
- 逻辑详解
- 全部案例代码
逻辑详解
- 首先我们看常见的日期格式:
2021-01-01
,2021/01/01
等等,因此通过以下两个规则判断: - 规则一:每一个单元格的长度都相同
- 规则二:每一个单元格的内容,按照某个字符切分后都是等长的
判断一个series
是否可以转换为datetime
:
def check_is_datetime(series, time_mark='-') -> bool:
if series.dtype == 'object':
# 1. 长度相同
series_len = series.str.len()
for i in range(len(series_len)):
if series_len[0] != series_len[i]:
return False
# 2. 被切分后都有三份
for sp in series.str.split(time_mark):
if len(sp) != 3:
return False
return True
elif series.dtypes == 'datetime64[ns]':
return True
else:
return False
全部案例代码
import pandas as pd
# 判断一个series是否为datetime格式
def check_is_datetime(series, time_mark='-') -> bool:
if series.dtype == 'object':
# 1. 长度相同
series_len = series.str.len()
for i in range(len(series_len)):
if series_len[0] != series_len[i]:
return False
# 2. 被切分后都有三份
for sp in series.str.split(time_mark):
if len(sp) != 3:
return False
return True
elif series.dtypes == 'datetime64[ns]':
return True
else:
return False
def check_date(dataframe: pd.DataFrame):
check_list = []
for index, series in dataframe.iteritems():
check_list.append(check_is_datetime(series, time_mark='-'))
return check_list
if __name__ == '__main__':
df = pd.DataFrame([
['2021-01-01', 'hahhah', '9340do', 43, 123.23, '2021-01-01'],
['2022-02-02', 'balbal', 'jsi0-2-3', 12, 34.0, '2022-02-02'],
['2023-03-03', 'kkk', '123vd-2f', 23, 12.0, '2023-03-03'],
], columns=['time1', 'str1', 'str2', 'int1', 'float1', 'time2'])
check_datetime_list = check_date(df)
print(check_datetime_list) # 返回是时间格式的列
print(df.iloc[:, check_datetime_list]) # 打印时间所在列
打印内容:
[True, False, False, False, False, True]
time1 time2
0 2021-01-01 2021-01-01
1 2022-02-02 2022-02-02
2 2023-03-03 2023-03-03