加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

PythonDataframe时间序列处理,日线转季周月年线

(2018-09-18 10:59:22)
标签:

python

日线

月线

季线

dataframe

分类: Python
用Tushare获得股票历史交易数据并存放在Dataframe中,名为df,结构如下,部分列为后处理,不重要

ts_code trade_date open high low close pre_close change pct_change vol amount report_date report_year
0 000001.SZ 20180820 8.90 9.02 8.87 9.00 8.81 0.19 2.1566 681322.06 609934.725 20180630 20171231

现在需要将其转换为季线,从而和财报结合观测数据,具体代码如下

 Python Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#转换YYYYMMDD格式的字符串为YYYY-MM-DD
def str_to_date(str):
    
if len(str)==8:
        
return str[0:4]+'-'+str[4:6]+'-'+str[6:8]
    
else:
        
return str
df[
'trade_date']=df['trade_date'].apply(str_to_date)

#转换为日期格式,否则无法转换季线
df['trade_date'pd.to_datetime(df['trade_date'])
周 月 年 季度,这里用Q
period_type 'Q'
#必须将日期格式作为索引,才能做resample
df.set_index('trade_date',inplace=True)

#原来的做法是 resample(...how='last'),但新版本中不那么用了
#日期用最后那天的日期
df_quote df.resample(period_type).last()
#涨跌用自定义函数计算,这里用apply
#开盘取第一天,收盘去最后一天,最高和最低分别取最大最小值,成交量和成交金额取求和值
#这里也不用how的方法
df_quote['change'df['change'].resample(period_type).apply(lambda x:(x+1.0).prod()-1.0)
df_quote[
'open'df['open'].resample(period_type).first()
df_quote[
'close'df['close'].resample(period_type).last()
df_quote[
'high'df['high'].resample(period_type).max()
df_quote[
'low'df['low'].resample(period_type).min()
df_quote[
'vol'df['vol'].resample(period_type).sum()
df_quote[
'amount'df['amount'].resample(period_type).sum()

#过滤整季度无交易的数据
df_quote df_quote[df_quote['ts_code'].notnull()]
#从新索引
df_quote.reset_index(inplace=True)
df.reset_index(inplace=
True)

df_quote


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有