Python数据分析库pandas高级接口dt的使用详解

Series对象和DataFrame的列数据提供了cat、dt、str三种属性接口(accessors),分别对应分类数据、日期时间数据和字符串数据,通过这几个接口可以快速实现特定的功能,本文着重讨论日期时间数据,先看一个完整的案例:
 

import pandas as pd 
import numpy as np

# 产生一个时间序列,从2021-5-1 00:00:00 到 2021-5-10 00:02:00 频率是日
date = pd.date_range(start='2021-5-1 00:00:00',end='2021-5-10 00:02:00',freq='D')
df1 = pd.DataFrame({'日期':date})

# 数字转星期 中文
def cnWeek(x):
    w = ['一','二','三','四','五','六','日']
    return w[x]

# 数字转星期 英文
def enWeek(x):
    w=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
    return w[x]

def call_cnWeek(f):
    return cnWeak(f.dayofweek)

def call_enWeek(f):
    return enWeek(f.dayofweek)


# 遍历这个列输出日期的不同格式
for e in df1['日期']:
    print(e,'{0}年{1}月{2}日{3}时{4}分{5}秒 {6} {7} 第{8}周 第{9}天 第{10}季度 '.format(
        e.year,
        '{0:0>2}'.format(e.month),
        '{0:0>2}'.format(e.day),        
        '{0:0>2}'.format(e.hour),
        '{0:0>2}'.format(e.minute),
        '{0:0>2}'.format(e.second),        
        cnWeek(e.dayofweek),
        '{:<10}'.format(enWeek(e.dayofweek)),
        e.weekofyear,
        e.dayofyear,
        e.quarter
        
    ))

df1['year'] = df1['日期'].dt.year
df1['month'] = df1['日期'].apply(lambda x:'{0:0>2}'.format(x.month))
df1['day'] = df1['日期'].apply(lambda x:'{0:0>2}'.format(x.day))
df1['hour'] = df1['日期'].apply(lambda x:'{0:0>2}'.format(x.hour))
df1['minute'] = df1['日期'].apply(lambda x:'{0:0>2}'.format(x.minute))
df1['second'] = df1['日期'].apply(lambda x:'{0:0>2}'.format(x.second))
df1['cn_week'] = df1['日期'].apply(call_cnWeek)
df1['W'] = df1['日期'].apply(lambda x:'第{0}周'.format(x.weekofyear))
df1['D'] = df1['日期'].apply(lambda x:'第{0}天'.format(x.dayofyear))
df1['Q'] = df1['日期'].apply(lambda x:'第{0}季度'.format(x.quarter))

file = r'E:\Pandas\data\测试日期序列数据.xls'
df1.to_excel(file,index=False)

2021-05-01 00:00:00 2021年05月01日00时00分00秒 六 Saturday   第17周 第121天 第2季度 
2021-05-02 00:00:00 2021年05月02日00时00分00秒 日 Sunday     第17周 第122天 第2季度 
2021-05-03 00:00:00 2021年05月03日00时00分00秒 一 Monday     第18周 第123天 第2季度 
2021-05-04 00:00:00 2021年05月04日00时00分00秒 二 Tuesday    第18周 第124天 第2季度 
2021-05-05 00:00:00 2021年05月05日00时00分00秒 三 Wednesday  第18周 第125天 第2季度 
2021-05-06 00:00:00 2021年05月06日00时00分00秒 四 Thursday   第18周 第126天 第2季度 
2021-05-07 00:00:00 2021年05月07日00时00分00秒 五 Friday     第18周 第127天 第2季度 
2021-05-08 00:00:00 2021年05月08日00时00分00秒 六 Saturday   第18周 第128天 第2季度 
2021-05-09 00:00:00 2021年05月09日00时00分00秒 日 Sunday     第18周 第129天 第2季度 
2021-05-10 00:00:00 2021年05月10日00时00分00秒 一 Monday     第19周 第130天 第2季度 

这个案例中用到了10种属性,下面分别介绍:
type(df1['日期']) 类型是pandas.core.series.Series,遍历这个Series之后在循环体内,type(e)是Timestamp类型,因此e.xxx都是这个类型的属性
 

属性名称 作用
year 返回四位的年
month 返回月份,int类型
day 日,int类型
hour 小时,int类型
minuter 分钟,int类型
second 秒,int类型
dayofweek 一周中的星期几,0代表星期一,6代表星期天
weekofyear 一年中的第几周
dayofyear 一年中的第几天
quarter 一年中的第几个季度

定义了两个函数cnWeek(),enWeek()根据根据dayofweek值返回具体的星期几,
本例中使用了date_range创建日期数据序列,date_range()是pandas中常用的函数,用于生成一个固定频率的DatetimeIndex时间索引,
起始日期是2021-5-1 00:00:00,结束日期是2021-5-10 00:02:00,频率是D表示按日产生时间序列,修改起始结束日期可以得到更多数据

从第25行开始对日期中的各项项进行拆分成单独的列,然后输出到测试日期序列数据.xls,输出结果如下:
Python数据分析库pandas高级接口dt的使用详解_第1张图片

你可能感兴趣的:(数据分析,Pandas,python)