时间序列,日期格式处理

原以为本章是讲怎么用python处理时间格式,比如提取年月之类的。
但本节写的是时间格式已经工整后的事,暂时不是我想学的,所以跳过,就没有写公式了。

下面的函数时之前谷歌之后学到的,先放上来,书里面的在分割线后面:

--1、把列表中 str 转为datetime格式:pd.to_datetime

这次使用的是trd的数据,对用户名,产品,姓名做了处理。
要改变df中times的格式
cycle 3576 non-null object
amount 3576 non-null float64
times 3576 non-null object
clipboard.png

#修改时间格式
# datetime.strptime(df.times, %Y%m%d)  这行代码是先测试是否修改成功
df['times'] = pd.to_datetime(df['times'], format='%Y/%m/%d')

更改后
cycle 3576 non-null object
amount 3576 non-null float64
times 3576 non-null datetime64[ns]

*讲了asfreq() 和 resample() 的使用方法,但是没有get到意思,略过。

--2、只取日期,不要时分

新增一列date,保留年月日,不要小时和分。

#新增一列日期,不要时分
df['date'] = pd.to_datetime(df['times']).dt.normalize()
df

clipboard.png

新增两列:年,月,以便后续分析。
(-- 这个方法太复杂,而且处理时间可能会更长,看下面的简单方法!!!)

#新增月份、年。在月份补齐为两位数,要先把原来的month改为字符串,再补齐原month,最后循环
df['year'] = [i.year for i in df['date']]
df['month'] = [str(i.month).zfill(2) for i in df['date']]
df

clipboard.png

数据处理完成之后,就可以用年月创建透视表了。

画了一个17年每天交易量的图,顺便引出下一章的内容,画图。

df.groupby(['date'])['amount'].count().plot()

把图删了,下一章全是讲的图,而且要突出下面的内容。

3、读取日期中的年、月、日、小时、分、等等等等

啊啊啊啊啊啊啊!!!!!这个真的找了好久的方法怎么读取dataframe中的小时和分,搜索之后全是读取现在的,妹的,你要现在的有鬼用啊,你的数据里面不是已经有具体的时间了吗,分析现在的时分干嘛?找了2个小时,翻来覆去都是这些没用的,越找越暴躁,最后还是在stackoverflow上找到了,感恩💗

#提取时间之前,要先把提取的字段设置成datatime格式
df['shijian'] = pd.to_datetime(df['date'], format = "%Y/%m/%d %H:%M:%S")

#>>>Out: shijian    825120 non-null datetime64[ns]

#拆分日期和小时分
temp = pd.DatetimeIndex(df['shijian'])
df['Date'] = temp.date
df['Time'] = temp.time
df['hourss'] = temp.hour
df['year'] = temp.year
df['month'] = temp.month

是不是比第二个方便好多,而且快啊,我真棒!!!给自己鼓掌👏👏👏
日期和时间是看了stackoverflow学到的,小时的看的官方文档。刚开始把time求出来之后,想的是用拆分的方法把小时算出来,但是用str.split()得到的结果是NaN,后来看了DatetimeIndex的官方文档后,才发现可以直接提取hour的值,所以还是看文档。

clipboard.png

附上文档的链接及截图,文档能解决的问题只有你想不到,没有做不到:
https://pandas.pydata.org/pan...

clipboard.png


下面是其他可能有用的知识点:
查看‘2017-09-03’ 是周几:

import pandas as pd
date1 =pd.to_datetime( "2017-09-03")
date1.strftime('%A')

Out:
'Sunday'

xiaom
17 声望2 粉丝

数据科学进修之路。