时间序列数据整理及日期分离(如何从datetime中分离week、星期等)——以Tushare的沪深三百数据为例

 问题:如何对datetime进行日期分离?例如,如果我希望知道星期几是否存在日历效应,那么该怎么做?(星期四最容易跌)

方式有很多种,我这里给出我觉得方便的两种:

我直接给出分离日期的部分代码:

这里面用到了一些lambda匿名函数,看起来比较装逼,但是实际上和另外一种方式是一样的(但是第二种方式无法提取星期几)

顺便提一嘴,对于pandas的dataframe来说,apply是比for循环要快的多的,而且看上去也简洁很多。

# 按照时间排序
df['trade_date'] = pd.to_datetime(df['trade_date'])  # 对str进行类型转换
df = df.sort_values('trade_date')

# 分离日期
df['year'] = df['trade_date'].apply(lambda x: datetime.strftime(x, '%Y'))
df['month'] = df['trade_date'].apply(lambda x: datetime.strftime(x, '%m'))
df['week'] = df['trade_date'].apply(lambda x: datetime.strftime(x, '%W'))
df['weekday'] = df['trade_date'].apply(lambda x: datetime.strftime(x, '%w'))
df['monthday'] = df['trade_date'].apply(lambda x: datetime.strftime(x, '%d'))

# 重设索引
df.set_index('trade_date', drop=True, inplace=True)

 第二种方式:

这种方式是从DatetimeIndex类型中直接提取的,简洁很多,但是也没有星期啥的的内容。

# 按照时间排序
df['trade_date'] = pd.to_datetime(df['trade_date'])
df = df.sort_values('trade_date')
# 重设索引
df.set_index('trade_date', drop=True, inplace=True)
# 分离日期
df['year'] = df.index.year
df['month'] = df.index.month
df['day'] = df.index.day

 最后完整代码附上,有兴趣的朋友可以自己运行一下(记得替换自己的Tushare平台的token)

import pandas as pd
from datetime import datetime
import tushare as ts


def set_tushare(token):
    ts.set_token(token)
    pro_ = ts.pro_api()
    return pro_


token = '你的Tushare代码'
pro_ = set_tushare(token)
df = pro_.index_daily(ts_code='000300.SH')
# 按照时间排序
df['trade_date'] = pd.to_datetime(df['trade_date'])
df = df.sort_values('trade_date')

# 分离日期
df['year'] = df['trade_date'].apply(lambda x: datetime.strftime(x, '%Y'))
df['month'] = df['trade_date'].apply(lambda x: datetime.strftime(x, '%m'))
df['week'] = df['trade_date'].apply(lambda x: datetime.strftime(x, '%W'))
df['weekday'] = df['trade_date'].apply(lambda x: datetime.strftime(x, '%w'))
df['monthday'] = df['trade_date'].apply(lambda x: datetime.strftime(x, '%d'))

# 重设索引
df.set_index('trade_date', drop=True, inplace=True)

# 查看涨跌情况在month的分布
df[['pct_chg', 'month']].groupby('month').mean().plot()
# 查看涨跌情况在weekday的分布
df[['pct_chg', 'weekday']].groupby('weekday').mean().plot()
# 查看涨跌情况在monthday的分布
df[['pct_chg', 'monthday']].groupby('monthday').mean().plot()

print(1)

“互联网精神”即:开放、平等、协作、快速、分享

对更多内容感兴趣欢迎关注我的个人公众号:梧承 Book House

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值