返回

量化交易系列【2】Pandas数据筛选及处理相关操作

发布时间:2022-12-08 23:45:31 299
# 数据

 

量化交易系列【2】Pandas数据筛选及处理相关操作

  • ​​筛选数据​​
  • ​​处理缺失值​​
  • ​​删除空值dropna​​
  • ​​补全缺失值fillna​​
  • ​​排序函数​​
  • ​​合并操作​​
  • ​​去除重复数据​​

示例中使用的‘000001.XSHE.csv’文件,已上传至csdn资源中,可直接下载

import pandas as pd
# 读取CSV文件
df = pd.read_csv('./000001.XSHE.csv')
df = df[:5] # 取前5行数据
df

 

 

 

 

date

open

close

high

low

volume

money

0

2015/1/5

9.98

10.00

10.17

9.74

458099037

4.565388e+09

1

2015/1/6

9.90

9.85

10.23

9.71

346952496

3.453446e+09

2

2015/1/7

9.72

9.67

9.88

9.55

272274401

2.634796e+09

3

2015/1/8

9.68

9.34

9.72

9.30

225445502

2.128003e+09

4

2015/1/9

9.30

9.42

9.91

9.19

401736419

3.835378e+09

df['code'] = '000001.XSHE'  # 添加股票代码列

筛选数据

# 筛选指定股票代码数据
# 选取某一只股票
df[df['code']=='000001.XSHE']
# 选取多只股票,用isin后面接列表
df[df['code'].isin(['000001.XSHE','000002.XSHE'])]
# 筛选收盘价大于9的数据
df[df['close'] >= 9.0]

 

 

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

# 筛选日期在2015/1/5与2015/1/7之间的数据
df['date'] = pd.to_datetime(df['date']) #将字符串的日期转换为日期类型
df[(df.date>='2015-01-05') & (df.date<='2015-01-07')]

 

 

date

open

close

high

low

volume

money

code

0

2015-01-05

9.98

10.00

10.17

9.74

458099037

4.565388e+09

000001.XSHE

1

2015-01-06

9.90

9.85

10.23

9.71

346952496

3.453446e+09

000001.XSHE

2

2015-01-07

9.72

9.67

9.88

9.55

272274401

2.634796e+09

000001.XSHE

处理缺失值

删除空值dropna

# how='any'表示只要有一个空值该行就删掉,how='all'所有列全为空值才删掉
df.dropna(how='any')
df.dropna(subset=['涨跌幅','MACD死叉’],how='all') # 表示 '涨跌幅','MACD死叉’这两个值均为空就删除改行

补全缺失值fillna

# 将缺失值给固定值,下面是将所有缺失值补位0
df.fillna(value='0')

# 通过其他列的值补充该列的缺失值,下面示例:用收盘价来补充'MACD金叉死叉'空值
df['MACD金叉死叉'].fillna(value=df['收盘价'], inplace=True)

# 向上寻找最近的一个非空值来补充该位置forward fill
df.fillna(method='ffill')

# 向下寻找最近的一个非空值来补充该位置backward fill
df.fillna(method='bfill')

# 判断缺失值
df[df['涨跌幅'].notnull()] #找出'涨跌幅'不为null的数据
df[df['涨跌幅'].isnull()] #找出'涨跌幅'为null的数据

排序函数

# 重置索引,新的index为0,1,2,3...
df.reset_index(inplace=True)

# 按照某一列进行排序, by指按照什么进行排序
df.sort_values(by=['交易日期'],ascending=True) #

# 按照多列进行排序
df.sort_values(by=['股票名称','交易日期'], ascending=[True, True]) #

合并操作

df1 = df.iloc[0:2]
df1

 

 

date

open

close

high

low

volume

money

0

2015/1/5

9.98

10.00

10.17

9.74

458099037

4.565388e+09

1

2015/1/6

9.90

9.85

10.23

9.71

346952496

3.453446e+09

df2 = df.iloc[3:5]
df2

 

 

date

open

close

high

low

volume

money

3

2015/1/8

9.68

9.34

9.72

9.30

225445502

2.128003e+09

4

2015/1/9

9.30

9.42

9.91

9.19

401736419

3.835378e+09

# 将df1,df2上下拼接,ignore_index=True,表示去除原有的Index,重新用0,1,2.....代替
df3 = df1.append(df2,ignore_index=True)
df3

 

 

date

open

close

high

low

volume

money

0

2015/1/5

9.98

10.00

10.17

9.74

458099037

4.565388e+09

1

2015/1/6

9.90

9.85

10.23

9.71

346952496

3.453446e+09

2

2015/1/8

9.68

9.34

9.72

9.30

225445502

2.128003e+09

3

2015/1/9

9.30

9.42

9.91

9.19

401736419

3.835378e+09

去除重复数据

df3.append(df2)

 

 

date

open

close

high

low

volume

money

0

2015/1/5

9.98

10.00

10.17

9.74

458099037

4.565388e+09

1

2015/1/6

9.90

9.85

10.23

9.71

346952496

3.453446e+09

2

2015/1/8

9.68

9.34

9.72

9.30

225445502

2.128003e+09

3

2015/1/9

9.30

9.42

9.91

9.19

401736419

3.835378e+09

3

2015/1/8

9.68

9.34

9.72

9.30

225445502

2.128003e+09

4

2015/1/9

9.30

9.42

9.91

9.19

401736419

3.835378e+09

# 去除['close','open']列相同的数据,如果不写subset,表示两行所有数据均相同才会去除
# keep参数表示保留哪一行的数据:last表示最后一行,first表示第一行
df3.drop_duplicates(subset=['close','open'],keep='last',inplace=True)
df3

 

 

 

 

date

open

close

high

low

volume

money

0

2015/1/5

9.98

10.00

10.17

9.74

458099037

4.565388e+09

1

2015/1/6

9.90

9.85

10.23

9.71

346952496

3.453446e+09

2

2015/1/8

9.68

9.34

9.72

9.30

225445502

2.128003e+09

3

2015/1/9

9.30

9.42

9.91

9.19

401736419

3.835378e+09

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线