Pandas处理日期数据的常见操作集锦
数据读取及整理
- 将数据类型转换为日期类型
df['date'] = pd.to_datetime(df['date'])
- 1
- 将date设置为index
df = df.set_index('date')
- 1
- 获取某年的数据
print(df['2010'].head())
- 1
- 获取某月的数据
print(df['2013-11'].head())
- 1
- 提取全日期字段中的日期和时间项
data4["订单生成时间"] = pd.to_datetime(data4["订单生成时间"])
data4["时间"] = data4["订单生成时间"].dt.hour #提取时间
data4["日期"] = data4["订单生成时间"].dt.date #提取日期
- 1
- 2
- 3
获取某个日期之前/后或时间区间的数据
dataframe的.truncate()函数
可以截取某个时期之前或之后的数据,或者某个时间区间的数据,进行统计分析。
注意事项:
使用.truncate()函数
对df进行数据集截取,遇到截取数据不符合预期,且若时间序列无序会抛出异常
解决措施:
在使用.truncate()函数
对df进行数据集截取之前,需要先使用df=df.sort_values(‘date’)‘date’列按时间先后进行排序,然后使用df = df.set_index('date')
,将“date”设置为index,最后再使用df_last=df.truncate(after=‘2019-05-22 16:00:00’)提取指定时间节点之前的数据。
函数语法:
DataFrame.truncate(before=None, after=None, axis=None, copy=True)
- 1
参数说明:
before:取值范围:date,string,int,是指截断此索引值之前的所有行
after:取值范围:date,string,int,是指截断此索引值后的所有行
axis:取值范围:{0或’index’,1或’columns’}(可选),是指轴截断。 默认情况截断索引(行)。
copy:取值范围:boolean,默认为True,返回截断部分的副本
常见用法:
- 获取2014年以后的数据
print(df.truncate(before='2014').head())
- 1
- 获取2013-11月之前的数据,用
after
print(df.truncate(after='2013-11').head())
- 1
- 获取2016-02月以后的数据,用
before
print(df.truncate(before='2016-02').head())
- 1
- 获取2019-05-22日16:00:00时之前的数据
df=data.truncate(after='2019-05-22 16:00:00')
- 1
- 获取指定时间区间的数据
df=df['2016-02-2':'2016-02-10']
- 1
- 获取指定时间区间的数据
df=df['2016-02-2':'2016-02-10']
- 1
python 获取当前时间及前一天时间
import datetime
from pandas.tseries.offsets import Day
now_time =datetime.datetime.now()#获取当前时间
yes_time = (now_time -1*Day()).strftime('%Y-%m-%d')#格式化
print(yes_time)
- 1
- 2
- 3
- 4
- 5
pandas的日期时间间隔运算
import datetime
from datetime import timedelta
df_189[‘订单生成日期’]=pd.to_datetime(df_189[‘订单生成日期’]) #修改“订单生成时间”的数据类型
df_189[‘订单生成日期’]+timedelta(days=1) #后一天的日期
df_189[‘订单生成日期’]-timedelta(days=3) #前3天的日期
选取指定时间范围内/外的数据
##提取3日前日期和7日前日期
now_time =datetime.datetime.now()#获取当前时间
yes_time_7 = (now_time -7*Day()).strftime('%Y-%m-%d')#格式化
yes_time_3= (now_time-3*Day()).strftime("%Y-%m-%d")
print(yes_time_7)
print('='*50)
print(yes_time_3)
df_189['订单生成日期']=pd.to_datetime(df_189['订单生成日期']) #修改“订单生成时间”的数据类型
df_189_7= df_189[df_189['订单生成日期']==yes_time_7]
df_189_3= df_189[df_189['订单生成日期']==yes_time_3]
print(df_189_7.info())
#选取该错误数据对应的时间范围外的数据,多个条件时 '|'代表'或','&'代表'且'
或者
a= df_189[df_189['订单生成日期']=='2019-06-23'] #筛选2019-06-23的数据
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
利用pandas计算DataFrame两列日期的间隔小时数
import pandas as pd
#方法一:
#先利用to_datetime转换为时间格式,tm列的数据形式为'yyyy-MM-dd HH:mm:ss'
df['tm_1'] = pd.to_datetime(df['tm_1'])
df['tm_2'] = pd.to_datetime(df['tm_2'])
#利用".dt.seconds"转换为秒,除以相对于的间隔数得到分钟、小时等
df['diff_time'] = (df['tm_1'] - df['tm_2']).dt.seconds/60
#利用round函数可进行四舍五入
df['diff_time'] = round(df['diff_time'])
#方法二,日期相减变为小时;变为天的话将h替换为D即可:
df[‘diff_time’] = (df[‘tm_1’] - df[‘tm_2’]).values/np.timedelta64(1, ‘h’)
#Dataframe中的时间是不能直接进行相加减的,所以需要先用pandas的to_datetime()方法,转化成时间格式进行加减,然后再转换成df格式
#delta=df1[‘Time_end’]-df1[‘Time_start’] #直接报错TypeError: unsupported operand type(s) for -: ‘str’ and ‘str’
#日期相减变为小时;变为天的话将h替换为D即可:
sf_df[‘交易周期’]=pd.DataFrame((pd.to_datetime(sf_df[‘交易完成时间’])-pd.to_datetime(sf_df[‘订单生成时间’])).values/np.timedelta64(1,‘h’))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e44c3c0e64.css" rel="stylesheet">
</div>