00-pandas时间类型的转换方法
分别借助了pandas自身的to_datetime函数、datetime模块的strptime函数和dateutil库的parser类的parse方法
- birthday列的时间格式不一致,但to_datetime()函数依然可以理解
import pandas as pd
data = {
'ID': ['000{}'.format(str(i)) for i in range(1, 7)],
'name': ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'],
'gender': [True, True, False, True, False, True],
'birthday': ['2004-10-01','2000/11/27','01-27-2002',
'2002-08-15','2003-01-01','2002-12-31'],
'height': [1.1, 1.2, 1.3, 1.4, 1.5, 1.6]
}
df = pd.DataFrame(data)
df['birthday'] = pd.to_datetime(df['birthday'])
df['birthday']
0 2004-10-01
1 2000-11-27
2 2002-01-27
3 2002-08-15
4 2003-01-01
5 2002-12-31
Name: birthday, dtype: datetime64[ns]
- 当时间中含有汉字时需用到datetime模块中的strptime函数
import pandas as pd
from datetime import datetime
data = {
'ID': ['000{}'.format(str(i)) for i in range(1, 7)],
'name': ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'],
'gender': [True, True, False, True, False, True],
'birthday': ['2004年10月01日','2000年11月27日','2002年01月27日',
'2002年08月15日','2003年01月01日','2002年12月31日'],
'height': [1.1, 1.2, 1.3, 1.4, 1.5, 1.6]
}
df = pd.DataFrame(data)
df['birthday'] = df['birthday'].apply(datetime.strptime, args=['%Y年%m月%d日'])
df['birthday']
0 2004-10-01
1 2000-11-27
2 2002-01-27
3 2002-08-15
4 2003-01-01
5 2002-12-31
Name: birthday, dtype: datetime64[ns]
- parse函数可以转换除了有汉字时间的所有格式,无论是残缺的还是混乱的
import pandas as pd
from dateutil.parser import parse
data = {
'ID': ['000{}'.format(str(i)) for i in range(1, 7)],
'name': ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'],
'gender': [True, True, False, True, False, True],
'birthday': ['20041001','2000-11-27','2002',
'15/08/2002','May,1st 2003','31,12'],
'height': [1.1, 1.2, 1.3, 1.4, 1.5, 1.6]
}
df = pd.DataFrame(data)
df['birthday'] = df['birthday'].apply(parse)
df['birthday']
0 2004-10-01
1 2000-11-27
2 2002-07-25
3 2002-08-15
4 2003-05-01
5 2020-07-31
Name: birthday, dtype: datetime64[ns]