时间序列,日期格式处理
原以为本章是讲怎么用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
#修改时间格式
# 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
新增两列:年,月,以便后续分析。
(-- 这个方法太复杂,而且处理时间可能会更长,看下面的简单方法!!!)
#新增月份、年。在月份补齐为两位数,要先把原来的month改为字符串,再补齐原month,最后循环
df['year'] = [i.year for i in df['date']]
df['month'] = [str(i.month).zfill(2) for i in df['date']]
df
数据处理完成之后,就可以用年月创建透视表了。
画了一个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的值,所以还是看文档。
附上文档的链接及截图,文档能解决的问题只有你想不到,没有做不到:
https://pandas.pydata.org/pan...
下面是其他可能有用的知识点:
查看‘2017-09-03’ 是周几:
import pandas as pd
date1 =pd.to_datetime( "2017-09-03")
date1.strftime('%A')
Out:
'Sunday'
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。