量化交易系列【3】如何高效处理字符串和时间数据?

2026-04-02 02:411阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1587个文字,预计阅读时间需要7分钟。

量化交易系列【3】如何高效处理字符串和时间数据?

量化交易系列[3]:字符串与时间处理+字符串处理+时间处理+pd.to_datetime函数+取日期相关数据+示例中使用的文件为'00001.XSHE.csv',已上传至csdn资源中


量化交易系列[字符串与时间处理

  • ​​字符串处理​​
  • ​​时间处理​​
  • ​​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

量化交易系列【3】如何高效处理字符串和时间数据?

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['交易日期'] # 增加一天然后再减去今天的日期


本文共计1587个文字,预计阅读时间需要7分钟。

量化交易系列【3】如何高效处理字符串和时间数据?

量化交易系列[3]:字符串与时间处理+字符串处理+时间处理+pd.to_datetime函数+取日期相关数据+示例中使用的文件为'00001.XSHE.csv',已上传至csdn资源中


量化交易系列[字符串与时间处理

  • ​​字符串处理​​
  • ​​时间处理​​
  • ​​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

量化交易系列【3】如何高效处理字符串和时间数据?

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['交易日期'] # 增加一天然后再减去今天的日期