量化交易系列[【3】字符串与时间处理
- 字符串处理
- 时间处理
- pd.to_datetime函数
- 取日期相关数据
示例中使用的‘000001.XSHE.csv’文件,已上传至csdn资源中,可直接下载
import pandas as pd
# 读取CSV文件
df = pd.read_csv('./000001.XSHE.csv')
df = df[:5] # 取前5行数据
df['code'] = '000001.XSHE' # 添加股票代码列
df
date
open
close
high
low
volume
money
code
0
2015/1/5
9.98
10.00
10.17
9.74
458099037
4.565388e+09
000001.XSHE
1
2015/1/6
9.90
9.85
10.23
9.71
346952496
3.453446e+09
000001.XSHE
2
2015/1/7
9.72
9.67
9.88
9.55
272274401
2.634796e+09
000001.XSHE
3
2015/1/8
9.68
9.34
9.72
9.30
225445502
2.128003e+09
000001.XSHE
4
2015/1/9
9.30
9.42
9.91
9.19
401736419
3.835378e+09
000001.XSHE
字符串处理
在df之后加上str,可以把数据变为字符串,然后就可以使用常见的字符串函数对整列进行操作
# 取股票代码前6位
df['code'].str[:6]
0 000001
1 000001
2 000001
3 000001
4 000001
Name: code, dtype: object
# 转换字母大小写:upper转大写,lower转小写
df['code'].str.lower()
0 000001.xshe
1 000001.xshe
2 000001.xshe
3 000001.xshe
4 000001.xshe
Name: code, dtype: object
# 计算字符串的长度,length
df['code'].str.len()
0 11
1 11
2 11
3 11
4 11
Name: code, dtype: int64
# strip操作,把字符串两边的空格去掉
df['code'].str.strip()
0 000001.XSHE
1 000001.XSHE
2 000001.XSHE
3 000001.XSHE
4 000001.XSHE
Name: code, dtype: object
df['code'].str.strip() # strip操作,把字符串两边的空格去掉
df['code'].str.contains('sh') # 判断字符串中是否包含某些特定字符
df['code'].str.replace('sz', 'sh') # 进行替换,将sz替换成sh
# split操作
df['板块'] = '保险;金融'
df
date
open
close
high
low
volume
money
code
板块
0
2015/1/5
9.98
10.00
10.17
9.74
458099037
4.565388e+09
000001.XSHE
保险;金融
1
2015/1/6
9.90
9.85
10.23
9.71
346952496
3.453446e+09
000001.XSHE
保险;金融
2
2015/1/7
9.72
9.67
9.88
9.55
272274401
2.634796e+09
000001.XSHE
保险;金融
3
2015/1/8
9.68
9.34
9.72
9.30
225445502
2.128003e+09
000001.XSHE
保险;金融
4
2015/1/9
9.30
9.42
9.91
9.19
401736419
3.835378e+09
000001.XSHE
保险;金融
df['板块'].str.split(';') # 对字符串进行分割
0 [保险, 金融]
1 [保险, 金融]
2 [保险, 金融]
3 [保险, 金融]
4 [保险, 金融]
Name: 板块, dtype: object
df['板块'].str.split(';').str[:1] # 分割后取第一个值
0 [保险]
1 [保险]
2 [保险]
3 [保险]
4 [保险]
Name: 板块, dtype: object
df['板块'].str.split(';', expand=True) # expand=True分割后并且将数据分列
0
1
0
保险
金融
1
保险
金融
2
保险
金融
3
保险
金融
4
保险
金融
时间处理
pd.to_datetime函数
# pd.to_datetime函数:将交易日期由字符串改为时间变量
df['date'] = pd.to_datetime(df['date'])
pd.to_datetime('1999/01/01 16:45')
Timestamp('1999-01-01 16:45:00')
取日期相关数据
df['date'].dt.year # 输出这个日期的年份。相应的month是月份,day是天数,还有hour, minute, second
df['date'].dt.week # 这一天是一年当中的第几周
df['date'].dt.dayofyear # 这一天是一年当中的第几天
df['date'].dt.dayofweek # 这一天是这一周当中的第几天,0代表星期一
df['date'].dt.weekday # 和上面函数相同,更加常用
df['date'].dt.weekday_name # 和上面函数相同,返回的是星期几的英文,用于报表的制作。
df['date'].dt.days_in_month # 这一天是这一月当中的第几天
df['date'].dt.is_month_end # 这一天是否是该月的开头,是否存在is_month_end?
df['date'] + pd.Timedelta(days=1) # 增加一天,Timedelta用于表示时间差数据
(df['date'] + pd.Timedelta(days=1)) - df['交易日期'] # 增加一天然后再减去今天的日期