python数据分析——datetime数据类型2

参考资料:活用pandas库

# 导入pandas库
import pandas as pd
# 加载数据集
tesla=pd.read_csv(r"...\data\tesla_stock_yahoo.csv")
# 查看数据
print(tesla.head())

1、基于日期取数据子集

# 将Date数据列转换为datetime类型
tesla['Date']=pd.to_datetime(tesla['Date'])
# 查看2010年6月的数据
tesla[(tesla.Date.dt.year==2010) & (tesla.Date.dt.month==6)]

(1)DatetimeIndex对象

        在处理包含datetime的数据时,经常需要datetime对象设置成DataFrame的索引。把索引设置为日期对象之后,就可以直接使用日期来获取某些数据行了,如根据年份来获取部分数据,也可以根据年份和月份来获取数据。

# 将Date设置为索引
tesla.index=tesla['Date']
# 展示索引
print(tesla.index)

# 获取2015年的数据
print(tesla['2015'].iloc[:5,:5])

# 获取2015年6月的数据
print(tesla['2015-06'].iloc[:5,:5])

(2)TimedeltaIndex对象

# 创建一个timedelta
tesla['ref_date']=tesla['Date']-tesla['Date'].min()
# 将此timedelta设置为索引
tesla.index=tesla['ref_date']
# 数据展示
print(tesla.iloc[:5,:5])

# 筛选数据
print(tesla.loc['0 day':'5 day'].iloc[:5,:5])

2、日期范围

        并非每个数据集的值都有固定的频率,可以通过date_range函数来创建一个日期范围来为数据集重建索引。

# 读取数据集
ebola=pd.read_csv(r"...\data\country_timeseries.csv",parse_dates=[0])
# 展示数据
print(ebola.iloc[:5,:5])

# 指定日期范围
head_range=pd.date_range(start='2014-12-31',end='2015-01-05')
print(head_range)
ebola5=ebola.head()
ebola5.index=ebola5['Date']
ebola5.reindex(head_range)
print(ebola5.iloc[:,:5])

(1)频率

        pandas的date_range函数有一个参数freq,其默认值为D(代表day),表示日期范围内的值是逐日递增的。

别名说明别名说明
B工作日QS季度初
C自定义工作日BQS季度初工作日
D日历日A年末
W每周BA年末工作日
M月末AS年初
SM

月中和月末

(每月第15天和月末)

BAS年初工作日
BM月末工作日BH工作时间
CBM自定义月末工作日H小时
MS月初T分钟
SMS

月初和月中

(每月第1天和第15天)

S
BMS月初工作日L毫秒
CBMS自定义月初工作日U微秒
Q季度末N纳秒
BQ季度末工作日
# 输出2017年1月1日至7日所有的工作日
print(pd.date_range('2017-01-01','2017-01-07',freq='B'))

(2)偏移量

        偏移量是在基本频率基础上做的一点调整。如下:

# 从2017年1月1日这周每隔一天取一个工作日
print(pd.date_range('2017-01-01','2017-01-07',freq='2B'))

# 2017年每个月的第一个星期四
print(pd.date_range("2017-01-01","2017-12-31",freq="WOM-1THU"))

# 2017年每个月的第三个星期五
print(pd.date_range("2017-01-01","2017-12-31",freq="WOM-3FRI"))

3、重采样

        重采样会把datetime从一个频率转换为另一个频率。重采样有如下3类。

        (1)下采样:从高频率到低频率(比如从每天到每月)

        (2)上采样:从低频率到高频率(比如从每月到每天)

        (3)原样采样:采样频率不变(比如从每月的第一个星期四到每月的最后一个星期五)

# 下采样:从每天到每月
# 这里有多个值,需要把结果聚合起来
# 这里用mean函数
ebola.index=ebola.Date
down=ebola.resample('M')
print(type(down))
print(down.mean().iloc[:5,:5])

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值