python的datetime模块是用来处理时间格式的数据的,之前没有接触过,今天因为帮朋友修改项目,学习了下,发现如果用好了真的是一把利器。
我们以芝加哥共享单车数据集为分析对象,来看一下如何处理这样的时间格式的列。
我们打印字段看看
![f5b1e5e4f44fb0c0bbfa0a5cf6ae787b.png](https://i-blog.csdnimg.cn/blog_migrate/9171116ee2a945c8d474bbd9197fb890.png)
![199693481c7e1906f4c966de48c0ae8e.png](https://i-blog.csdnimg.cn/blog_migrate/fb8cdf1712f4b43160f4a2b1ea9ec58c.png)
发现这个数据集有很多字段,其中头两列是我们要用的时间格式的列,是我们主要用来操作的列。我们接下来用数据分析模块pandas来读取这个数据集。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
df=pd.read_csv('chicago.csv')
df.head()
![3a3906278768d692424a10625ca073dd.png](https://i-blog.csdnimg.cn/blog_migrate/26ef8b6487c30a3e3c0fee7bb3f13a68.jpeg)
导入datetime模块
from datetime import datetime as dt
#datetime模块的strptime能够将文本字符串格式的数据转换成时间格式的数据,而strftime方法则是能够把时间格式的数据按照我们想要的时间格式输出,比如说输出这个日期的月份名字,星期几等等,扩展性十分强大
#我们在这里就可以定义一个函数让上面的dataframe来apply这个方法达到转换的目的
#输出星期几
def trans_weekday(date):
return date.strptime(date, '%Y-%m-%d %H:%M:%S').strftime('%A').lower()#strptime传入两个参数,date是字符串的时间,后面是以什么格式来读取,而strftime则是输入我们想要输出的格式,比如这里的%A就是输出星期几的全称如tuesday
def trans_month(date):
return date.strptime(date, '%Y-%m-%d %H:%M:%S').strftime('%B').lower()#输出月份的全称
df['weekday']=df['Start Time'].apply(trans_weekday)
df['month']=df['Start Time'].apply(trans_month)
df.head(2)
![1f66d0bc8d3b43df6a1dcd02cc55bf1f.png](https://i-blog.csdnimg.cn/blog_migrate/b0d81dda17f72928290f538bf4703fad.jpeg)
可以看到,确实已经转化好了。
此外,转化方法除了用dt,strptime
的方法,也可以用pandas.to_datetime()
里面传入字符串来转换成时间格式。
关于日期格式的表达方法,在参考资源:日期处理方法有列出。
![a39e9196f0163b65432a75da851d27e0.png](https://i-blog.csdnimg.cn/blog_migrate/734cd9f037429868b928ec94e55236f9.jpeg)
datetime
还有很多方法和属性,比如now()
返回当前的时间,timedelta
是相关的时间间隔,可以跟时刻进行相加减。now对象还有多种输出格式,参考这里。