Pandas基础操作技能get! 强烈推荐!

dataframe
pandas
用户成长系列
标签: #<Tag:0x00007f20babbfeb8> #<Tag:0x00007f20babbfd78> #<Tag:0x00007f20babbfc38>

(iQuant) #1
克隆策略

如何操作pandas?

用一个实际的数据集练手可能是最快最好的方法。

今天就和大家一起探索pandas关于数据操作和处理的基础方法。

1.获取股票数据

使用数据API获取数据,参考:BigQuant数据API详解

In [1190]:
stock = D.instruments()[:20] #选取股票列表中前20只股票
df = D.history_data(stock, 
                    '2017-08-01', 
                    '2017-08-05', 
                    ['company_name','company_type','volume',
                     'fs_net_profit','fs_roe']) #获取相关股票数据
# 分别为公司名称,公司类型,成交量,净利润,净资产收益率
df.head() # 只查看前5行
Out[1190]:
instrument date volume company_name company_type fs_net_profit fs_roe
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116
2 000004.SZA 2017-08-01 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797
3 000005.SZA 2017-08-01 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537

2.数据初探

In [1191]:
df.head(3) # 取前3行数据查看
Out[1191]:
instrument date volume company_name company_type fs_net_profit fs_roe
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116
2 000004.SZA 2017-08-01 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797
In [1137]:
df.tail(3) # 取最后3行数据查看
Out[1137]:
instrument date volume company_name company_type fs_net_profit fs_roe
77 000021.SZA 2017-08-04 11471227 深圳长城开发科技股份有限公司 中央国有企业 116724688.0 2.1430
78 000022.SZA 2017-08-04 13885068 深圳赤湾港航股份有限公司 中央国有企业 138844496.0 2.9044
79 000023.SZA 2017-08-04 0 深圳市天地(集团)股份有限公司 公众企业 10531537.0 2.6827
In [1138]:
df.sample(5) # 随机抽取5条数据查看
Out[1138]:
instrument date volume company_name company_type fs_net_profit fs_roe
67 000009.SZA 2017-08-04 84400932 中国宝安集团股份有限公司 公众企业 3.347200e+07 0.7437
51 000014.SZA 2017-08-03 1209840 沙河实业股份有限公司 地方国有企业 -3.359943e+06 -0.4574
38 000022.SZA 2017-08-02 10208777 深圳赤湾港航股份有限公司 中央国有企业 1.388445e+08 2.9044
19 000023.SZA 2017-08-01 0 深圳市天地(集团)股份有限公司 公众企业 1.053154e+07 2.6827
74 000018.SZA 2017-08-04 9099017 神州长城股份有限公司 民营企业 9.902958e+07 5.4350
In [1139]:
df.shape #查看数据行列大小
Out[1139]:
(80, 7)
In [1140]:
df.columns #查看数据的列名
Out[1140]:
Index(['instrument', 'date', 'volume', 'company_name', 'company_type',
       'fs_net_profit', 'fs_roe'],
      dtype='object')
In [1141]:
df.describe() #查看数据的统计值
Out[1141]:
volume fs_net_profit fs_roe
count 8.000000e+01 8.000000e+01 80.000000
mean 2.153483e+07 3.934997e+08 1.595305
std 3.982048e+07 1.353417e+09 2.877810
min 0.000000e+00 -2.550807e+07 -1.158000
25% 3.457600e+06 -1.352505e+05 -0.058325
50% 7.385609e+06 1.838845e+07 0.821900
75% 1.738763e+07 1.222546e+08 2.286550
max 2.062069e+08 6.214000e+09 11.774600
In [1142]:
df.info() #查看导入数据类型
<class 'pandas.core.frame.DataFrame'>
Int64Index: 80 entries, 0 to 79
Data columns (total 7 columns):
instrument       80 non-null object
date             80 non-null datetime64[ns]
volume           80 non-null int64
company_name     80 non-null object
company_type     80 non-null object
fs_net_profit    80 non-null float64
fs_roe           80 non-null float64
dtypes: datetime64[ns](1), float64(2), int64(1), object(3)
memory usage: 5.0+ KB

3.行/列选取

In [1143]:
df.iloc[22] #利用iloc命令做行选取
Out[1143]:
instrument                000004.SZA
date             2017-08-02 00:00:00
volume                        792395
company_name          深圳中国农大科技股份有限公司
company_type                    民营企业
fs_net_profit           -1.17797e+06
fs_roe                       -0.9797
Name: 22, dtype: object
In [1144]:
df.loc[22:25] #利用loc命令做行选取
Out[1144]:
instrument date volume company_name company_type fs_net_profit fs_roe
22 000004.SZA 2017-08-02 792395 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797
23 000005.SZA 2017-08-02 6313300 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938
24 000006.SZA 2017-08-02 15834085 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537
25 000007.SZA 2017-08-02 5313578 深圳市全新好股份有限公司 民营企业 2.768926e+05 0.0747
In [1145]:
df.loc[[22,33,44]] #利用loc命令做指定行选取
Out[1145]:
instrument date volume company_name company_type fs_net_profit fs_roe
22 000004.SZA 2017-08-02 792395 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797
33 000017.SZA 2017-08-02 3603500 深圳中华自行车(集团)股份有限公司 民营企业 2.123222e+05 1.4668
44 000006.SZA 2017-08-03 14414290 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537
In [1146]:
df['company_name'] #查看'company_name'列数据
Out[1146]:
0            平安银行股份有限公司
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    深圳市物业发展(集团)股份有限公司
            ...        
50         中国南玻集团股份有限公司
51           沙河实业股份有限公司
52           康佳集团股份有限公司
53    深圳中华自行车(集团)股份有限公司
54           神州长城股份有限公司
55        深圳市深宝实业股份有限公司
56         深圳中恒华发股份有限公司
57       深圳长城开发科技股份有限公司
58         深圳赤湾港航股份有限公司
59      深圳市天地(集团)股份有限公司
60           平安银行股份有限公司
61           万科企业股份有限公司
62       深圳中国农大科技股份有限公司
63         深圳世纪星源股份有限公司
64      深圳市振业(集团)股份有限公司
65         深圳市全新好股份有限公司
66         神州高铁技术股份有限公司
67         中国宝安集团股份有限公司
68         深圳美丽生态股份有限公司
69    深圳市物业发展(集团)股份有限公司
70         中国南玻集团股份有限公司
71           沙河实业股份有限公司
72           康佳集团股份有限公司
73    深圳中华自行车(集团)股份有限公司
74           神州长城股份有限公司
75        深圳市深宝实业股份有限公司
76         深圳中恒华发股份有限公司
77       深圳长城开发科技股份有限公司
78         深圳赤湾港航股份有限公司
79      深圳市天地(集团)股份有限公司
Name: company_name, dtype: object
In [1147]:
df[['instrument', 'company_name', 'fs_roe']] #获取多列数据
Out[1147]:
instrument company_name fs_roe
0 000001.SZA 平安银行股份有限公司 3.0319
1 000002.SZA 万科企业股份有限公司 0.6116
2 000004.SZA 深圳中国农大科技股份有限公司 -0.9797
3 000005.SZA 深圳世纪星源股份有限公司 -0.7938
4 000006.SZA 深圳市振业(集团)股份有限公司 2.0537
5 000007.SZA 深圳市全新好股份有限公司 0.0747
6 000008.SZA 神州高铁技术股份有限公司 0.1525
7 000009.SZA 中国宝安集团股份有限公司 0.7437
8 000010.SZA 深圳美丽生态股份有限公司 -1.1580
9 000011.SZA 深圳市物业发展(集团)股份有限公司 11.7746
10 000012.SZA 中国南玻集团股份有限公司 2.1545
11 000014.SZA 沙河实业股份有限公司 -0.4574
12 000016.SZA 康佳集团股份有限公司 0.9001
13 000017.SZA 深圳中华自行车(集团)股份有限公司 1.4668
14 000018.SZA 神州长城股份有限公司 5.4350
15 000019.SZA 深圳市深宝实业股份有限公司 -0.9659
16 000020.SZA 深圳中恒华发股份有限公司 0.1317
17 000021.SZA 深圳长城开发科技股份有限公司 2.1430
18 000022.SZA 深圳赤湾港航股份有限公司 2.9044
19 000023.SZA 深圳市天地(集团)股份有限公司 2.6827
20 000001.SZA 平安银行股份有限公司 3.0319
21 000002.SZA 万科企业股份有限公司 0.6116
22 000004.SZA 深圳中国农大科技股份有限公司 -0.9797
23 000005.SZA 深圳世纪星源股份有限公司 -0.7938
24 000006.SZA 深圳市振业(集团)股份有限公司 2.0537
25 000007.SZA 深圳市全新好股份有限公司 0.0747
26 000008.SZA 神州高铁技术股份有限公司 0.1525
27 000009.SZA 中国宝安集团股份有限公司 0.7437
28 000010.SZA 深圳美丽生态股份有限公司 -1.1580
29 000011.SZA 深圳市物业发展(集团)股份有限公司 11.7746
... ... ... ...
50 000012.SZA 中国南玻集团股份有限公司 2.1545
51 000014.SZA 沙河实业股份有限公司 -0.4574
52 000016.SZA 康佳集团股份有限公司 0.9001
53 000017.SZA 深圳中华自行车(集团)股份有限公司 1.4668
54 000018.SZA 神州长城股份有限公司 5.4350
55 000019.SZA 深圳市深宝实业股份有限公司 -0.9659
56 000020.SZA 深圳中恒华发股份有限公司 0.1317
57 000021.SZA 深圳长城开发科技股份有限公司 2.1430
58 000022.SZA 深圳赤湾港航股份有限公司 2.9044
59 000023.SZA 深圳市天地(集团)股份有限公司 2.6827
60 000001.SZA 平安银行股份有限公司 3.0319
61 000002.SZA 万科企业股份有限公司 0.6116
62 000004.SZA 深圳中国农大科技股份有限公司 -0.9797
63 000005.SZA 深圳世纪星源股份有限公司 -0.7938
64 000006.SZA 深圳市振业(集团)股份有限公司 2.0537
65 000007.SZA 深圳市全新好股份有限公司 0.0747
66 000008.SZA 神州高铁技术股份有限公司 0.1525
67 000009.SZA 中国宝安集团股份有限公司 0.7437
68 000010.SZA 深圳美丽生态股份有限公司 -1.1580
69 000011.SZA 深圳市物业发展(集团)股份有限公司 11.7746
70 000012.SZA 中国南玻集团股份有限公司 2.1545
71 000014.SZA 沙河实业股份有限公司 -0.4574
72 000016.SZA 康佳集团股份有限公司 0.9001
73 000017.SZA 深圳中华自行车(集团)股份有限公司 1.4668
74 000018.SZA 神州长城股份有限公司 5.4350
75 000019.SZA 深圳市深宝实业股份有限公司 -0.9659
76 000020.SZA 深圳中恒华发股份有限公司 0.1317
77 000021.SZA 深圳长城开发科技股份有限公司 2.1430
78 000022.SZA 深圳赤湾港航股份有限公司 2.9044
79 000023.SZA 深圳市天地(集团)股份有限公司 2.6827

80 rows × 3 columns

In [1148]:
df.loc[:10, ['company_name', 'fs_roe']] #获取指定行列数据
Out[1148]:
company_name fs_roe
0 平安银行股份有限公司 3.0319
1 万科企业股份有限公司 0.6116
2 深圳中国农大科技股份有限公司 -0.9797
3 深圳世纪星源股份有限公司 -0.7938
4 深圳市振业(集团)股份有限公司 2.0537
5 深圳市全新好股份有限公司 0.0747
6 神州高铁技术股份有限公司 0.1525
7 中国宝安集团股份有限公司 0.7437
8 深圳美丽生态股份有限公司 -1.1580
9 深圳市物业发展(集团)股份有限公司 11.7746
10 中国南玻集团股份有限公司 2.1545
In [1149]:
df.iloc[:5,3:] #获取指定行列数据
Out[1149]:
company_name company_type fs_net_profit fs_roe
0 平安银行股份有限公司 公众企业 6.214000e+09 3.0319
1 万科企业股份有限公司 公众企业 6.954116e+08 0.6116
2 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797
3 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938
4 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537

4.更多行列操作

接下来采用以上所学,我们进行练习:

In [1150]:
import numpy as np

df['open_int'] = np.nan #在数据表中新增一列"open_int",赋值为NaN(缺失值)
df.head() #查看数据集
Out[1150]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 NaN
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116 NaN
2 000004.SZA 2017-08-01 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797 NaN
3 000005.SZA 2017-08-01 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938 NaN
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 NaN
In [1151]:
df['open_int'] = 999 #赋值999
df.head()
Out[1151]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116 999
2 000004.SZA 2017-08-01 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797 999
3 000005.SZA 2017-08-01 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938 999
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999
In [1152]:
df['test'] = df.company_type == '民营企业' #判断
df.head(5)
Out[1152]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int test
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 False
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116 999 False
2 000004.SZA 2017-08-01 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797 999 True
3 000005.SZA 2017-08-01 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938 999 True
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999 False
In [1153]:
df.loc[df.company_type == '民营企业', 'test'] = '他是民营企业,税负真的不轻' #判断并赋值
df.loc[df.company_type != '民营企业', 'test'] = '不是民营企业,具体是啥还不知道' #判断并赋值
df.head()
Out[1153]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int test
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 不是民营企业,具体是啥还不知道
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116 999 不是民营企业,具体是啥还不知道
2 000004.SZA 2017-08-01 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797 999 他是民营企业,税负真的不轻
3 000005.SZA 2017-08-01 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938 999 他是民营企业,税负真的不轻
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999 不是民营企业,具体是啥还不知道
In [1154]:
df.loc[2:4, 'test'] = '我不听我不听' #选取特定行列,并赋值
df.head()
Out[1154]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int test
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 不是民营企业,具体是啥还不知道
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116 999 不是民营企业,具体是啥还不知道
2 000004.SZA 2017-08-01 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797 999 我不听我不听
3 000005.SZA 2017-08-01 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938 999 我不听我不听
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999 我不听我不听
In [1155]:
df.rename(columns={'test':'乱加的一列'}, inplace=True) #更改列名,并固化该操作
df.head()
Out[1155]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 不是民营企业,具体是啥还不知道
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116 999 不是民营企业,具体是啥还不知道
2 000004.SZA 2017-08-01 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797 999 我不听我不听
3 000005.SZA 2017-08-01 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938 999 我不听我不听
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999 我不听我不听
In [1156]:
df_test = df[:6] #取局部数据作练习
df_test.columns = ['列%s' % str(i) for i in range(1,len(df_test.columns)+1)] #更改所有的列名
df_test
Out[1156]:
列1 列2 列3 列4 列5 列6 列7 列8 列9
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 不是民营企业,具体是啥还不知道
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116 999 不是民营企业,具体是啥还不知道
2 000004.SZA 2017-08-01 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797 999 我不听我不听
3 000005.SZA 2017-08-01 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938 999 我不听我不听
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999 我不听我不听
5 000007.SZA 2017-08-01 10004406 深圳市全新好股份有限公司 民营企业 2.768926e+05 0.0747 999 他是民营企业,税负真的不轻
In [1157]:
df_test.reindex(columns= ['列1','列2','列4','列12','列3','列5','列6','列8','列7','列9']) #重排列名
df_test
Out[1157]:
列1 列2 列3 列4 列5 列6 列7 列8 列9
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 不是民营企业,具体是啥还不知道
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116 999 不是民营企业,具体是啥还不知道
2 000004.SZA 2017-08-01 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797 999 我不听我不听
3 000005.SZA 2017-08-01 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938 999 我不听我不听
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999 我不听我不听
5 000007.SZA 2017-08-01 10004406 深圳市全新好股份有限公司 民营企业 2.768926e+05 0.0747 999 他是民营企业,税负真的不轻
In [1158]:
df_test.reindex(index= [3,4,5,0,1,2]) #重排index
Out[1158]:
列1 列2 列3 列4 列5 列6 列7 列8 列9
3 000005.SZA 2017-08-01 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938 999 我不听我不听
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999 我不听我不听
5 000007.SZA 2017-08-01 10004406 深圳市全新好股份有限公司 民营企业 2.768926e+05 0.0747 999 他是民营企业,税负真的不轻
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 不是民营企业,具体是啥还不知道
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116 999 不是民营企业,具体是啥还不知道
2 000004.SZA 2017-08-01 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797 999 我不听我不听

5.行列删除

In [1159]:
df_test.drop([2,5],axis=0) #删除行
Out[1159]:
列1 列2 列3 列4 列5 列6 列7 列8 列9
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 不是民营企业,具体是啥还不知道
1 000002.SZA 2017-08-01 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116 999 不是民营企业,具体是啥还不知道
3 000005.SZA 2017-08-01 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938 999 我不听我不听
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999 我不听我不听
In [1160]:
df_test.drop(['列1','列2'], axis=1) #删除列
Out[1160]:
列3 列4 列5 列6 列7 列8 列9
0 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 不是民营企业,具体是啥还不知道
1 20952262 万科企业股份有限公司 公众企业 6.954116e+08 0.6116 999 不是民营企业,具体是啥还不知道
2 653388 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797 999 我不听我不听
3 7343560 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 -0.7938 999 我不听我不听
4 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999 我不听我不听
5 10004406 深圳市全新好股份有限公司 民营企业 2.768926e+05 0.0747 999 他是民营企业,税负真的不轻

6.数据类型的转化

In [1161]:
df['date'].sample(5) #查看数据
Out[1161]:
9    2017-08-01
35   2017-08-02
54   2017-08-03
23   2017-08-02
5    2017-08-01
Name: date, dtype: datetime64[ns]
In [1162]:
print(type(df.date[0]))
df.date = df.date.map(lambda x: x.strftime('%Y-%m-%d')) #将时间数据转换为字符串。
print(type(df.date[0]))
<class 'pandas.tslib.Timestamp'>
<class 'str'>

7.数据过滤

In [1163]:
df[df['fs_roe']>1].head() #选择fs_roe>10的数据,囿于篇幅,展示前几行
Out[1163]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 不是民营企业,具体是啥还不知道
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999 我不听我不听
9 000011.SZA 2017-08-01 10230327 深圳市物业发展(集团)股份有限公司 地方国有企业 3.015978e+08 11.7746 999 不是民营企业,具体是啥还不知道
10 000012.SZA 2017-08-01 15099069 中国南玻集团股份有限公司 公众企业 1.701309e+08 2.1545 999 不是民营企业,具体是啥还不知道
13 000017.SZA 2017-08-01 2857907 深圳中华自行车(集团)股份有限公司 民营企业 2.123222e+05 1.4668 999 他是民营企业,税负真的不轻
In [1164]:
df[(df['fs_roe']>1) & (df['fs_roe']<4)].head() #选择fs_roe在某区间的数据
Out[1164]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 不是民营企业,具体是啥还不知道
4 000006.SZA 2017-08-01 19458890 深圳市振业(集团)股份有限公司 地方国有企业 1.038588e+08 2.0537 999 我不听我不听
10 000012.SZA 2017-08-01 15099069 中国南玻集团股份有限公司 公众企业 1.701309e+08 2.1545 999 不是民营企业,具体是啥还不知道
13 000017.SZA 2017-08-01 2857907 深圳中华自行车(集团)股份有限公司 民营企业 2.123222e+05 1.4668 999 他是民营企业,税负真的不轻
17 000021.SZA 2017-08-01 7955667 深圳长城开发科技股份有限公司 中央国有企业 1.167247e+08 2.1430 999 不是民营企业,具体是啥还不知道
In [1165]:
df[(df['fs_roe']>1) & (df['company_type'] != '地方国有企业')].head() #选择满足多种条件的信息
Out[1165]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
0 000001.SZA 2017-08-01 203570991 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999 不是民营企业,具体是啥还不知道
10 000012.SZA 2017-08-01 15099069 中国南玻集团股份有限公司 公众企业 1.701309e+08 2.1545 999 不是民营企业,具体是啥还不知道
13 000017.SZA 2017-08-01 2857907 深圳中华自行车(集团)股份有限公司 民营企业 2.123222e+05 1.4668 999 他是民营企业,税负真的不轻
14 000018.SZA 2017-08-01 8572320 神州长城股份有限公司 民营企业 9.902958e+07 5.4350 999 他是民营企业,税负真的不轻
17 000021.SZA 2017-08-01 7955667 深圳长城开发科技股份有限公司 中央国有企业 1.167247e+08 2.1430 999 不是民营企业,具体是啥还不知道

8.数据排序

In [1166]:
df.sort_values(by='fs_roe').head() #按某条件排序,默认升序排列
Out[1166]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
28 000010.SZA 2017-08-02 5410561 深圳美丽生态股份有限公司 民营企业 -2.550807e+07 -1.1580 999 他是民营企业,税负真的不轻
68 000010.SZA 2017-08-04 5912089 深圳美丽生态股份有限公司 民营企业 -2.550807e+07 -1.1580 999 他是民营企业,税负真的不轻
8 000010.SZA 2017-08-01 4519425 深圳美丽生态股份有限公司 民营企业 -2.550807e+07 -1.1580 999 他是民营企业,税负真的不轻
48 000010.SZA 2017-08-03 4826822 深圳美丽生态股份有限公司 民营企业 -2.550807e+07 -1.1580 999 他是民营企业,税负真的不轻
62 000004.SZA 2017-08-04 711022 深圳中国农大科技股份有限公司 民营企业 -1.177969e+06 -0.9797 999 他是民营企业,税负真的不轻
In [1167]:
df.sort_values(by='fs_roe',ascending= False).head() #ascendig= False,按降序排列
Out[1167]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
69 000011.SZA 2017-08-04 5736572 深圳市物业发展(集团)股份有限公司 地方国有企业 301597824.0 11.7746 999 不是民营企业,具体是啥还不知道
49 000011.SZA 2017-08-03 7180287 深圳市物业发展(集团)股份有限公司 地方国有企业 301597824.0 11.7746 999 不是民营企业,具体是啥还不知道
29 000011.SZA 2017-08-02 8782902 深圳市物业发展(集团)股份有限公司 地方国有企业 301597824.0 11.7746 999 不是民营企业,具体是啥还不知道
9 000011.SZA 2017-08-01 10230327 深圳市物业发展(集团)股份有限公司 地方国有企业 301597824.0 11.7746 999 不是民营企业,具体是啥还不知道
14 000018.SZA 2017-08-01 8572320 神州长城股份有限公司 民营企业 99029584.0 5.4350 999 他是民营企业,税负真的不轻
In [1168]:
df.sort_values(by= ['fs_roe','fs_net_profit'],ascending= False).head() #多重指标排序
Out[1168]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
9 000011.SZA 2017-08-01 10230327 深圳市物业发展(集团)股份有限公司 地方国有企业 301597824.0 11.7746 999 不是民营企业,具体是啥还不知道
29 000011.SZA 2017-08-02 8782902 深圳市物业发展(集团)股份有限公司 地方国有企业 301597824.0 11.7746 999 不是民营企业,具体是啥还不知道
49 000011.SZA 2017-08-03 7180287 深圳市物业发展(集团)股份有限公司 地方国有企业 301597824.0 11.7746 999 不是民营企业,具体是啥还不知道
69 000011.SZA 2017-08-04 5736572 深圳市物业发展(集团)股份有限公司 地方国有企业 301597824.0 11.7746 999 不是民营企业,具体是啥还不知道
14 000018.SZA 2017-08-01 8572320 神州长城股份有限公司 民营企业 99029584.0 5.4350 999 他是民营企业,税负真的不轻

9.数据的描述统计

以数据的'fs_roe'列为例,进行数据描述和统计

In [1169]:
df['fs_roe'].mean() #计算平均数
Out[1169]:
1.5953049875795842
In [1170]:
df['fs_roe'].idxmax() #返回最大值index
Out[1170]:
9
In [1171]:
df.loc[df['fs_roe'].idxmin()] #定位到fs_roe最小的一列
Out[1171]:
instrument          000010.SZA
date                2017-08-01
volume                 4519425
company_name      深圳美丽生态股份有限公司
company_type              民营企业
fs_net_profit     -2.55081e+07
fs_roe                  -1.158
open_int                   999
乱加的一列            他是民营企业,税负真的不轻
Name: 8, dtype: object
In [1172]:
df.fs_net_profit.corr(df.volume) #求解相关系数
Out[1172]:
0.81501625795410615
In [1173]:
df.company_type.unique() #查看不重复的数据
Out[1173]:
array(['公众企业', '民营企业', '地方国有企业', '中央国有企业'], dtype=object)
In [1174]:
df.company_type.value_counts() #查看数据出现次数
Out[1174]:
民营企业      28
公众企业      24
地方国有企业    16
中央国有企业    12
Name: company_type, dtype: int64

10.处理缺失的数据

In [1175]:
df_test = df.sample(5)
df_test.loc[df_test['fs_roe']<=1,'fs_roe'] = np.nan #条件赋值NaN
df_test.loc[66] = np.nan #行赋值NaN
df_test #练习数据集构造完成
Out[1175]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
23 000005.SZA 2017-08-02 6313300.0 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 NaN 999.0 他是民营企业,税负真的不轻
47 000009.SZA 2017-08-03 69392114.0 中国宝安集团股份有限公司 公众企业 3.347200e+07 NaN 999.0 不是民营企业,具体是啥还不知道
16 000020.SZA 2017-08-01 0.0 深圳中恒华发股份有限公司 民营企业 4.211734e+05 NaN 999.0 他是民营企业,税负真的不轻
5 000007.SZA 2017-08-01 10004406.0 深圳市全新好股份有限公司 民营企业 2.768926e+05 NaN 999.0 他是民营企业,税负真的不轻
40 000001.SZA 2017-08-03 98421938.0 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999.0 不是民营企业,具体是啥还不知道
66 NaN NaN NaN NaN NaN NaN NaN NaN NaN
In [1176]:
df_test.dropna() #删去包含NaN值的行
Out[1176]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
40 000001.SZA 2017-08-03 98421938.0 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999.0 不是民营企业,具体是啥还不知道
In [1177]:
df_test.dropna(how= 'all',inplace= True) #删除全部为NaN的行,并使用'inplace=True'命令固化该删除操作。
df_test
Out[1177]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
23 000005.SZA 2017-08-02 6313300.0 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 NaN 999.0 他是民营企业,税负真的不轻
47 000009.SZA 2017-08-03 69392114.0 中国宝安集团股份有限公司 公众企业 3.347200e+07 NaN 999.0 不是民营企业,具体是啥还不知道
16 000020.SZA 2017-08-01 0.0 深圳中恒华发股份有限公司 民营企业 4.211734e+05 NaN 999.0 他是民营企业,税负真的不轻
5 000007.SZA 2017-08-01 10004406.0 深圳市全新好股份有限公司 民营企业 2.768926e+05 NaN 999.0 他是民营企业,税负真的不轻
40 000001.SZA 2017-08-03 98421938.0 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999.0 不是民营企业,具体是啥还不知道
In [1178]:
df_test.dropna(axis= 1) #删除含有NaN值的列
Out[1178]:
instrument date volume company_name company_type fs_net_profit open_int 乱加的一列
23 000005.SZA 2017-08-02 6313300.0 深圳世纪星源股份有限公司 民营企业 -1.014027e+07 999.0 他是民营企业,税负真的不轻
47 000009.SZA 2017-08-03 69392114.0 中国宝安集团股份有限公司 公众企业 3.347200e+07 999.0 不是民营企业,具体是啥还不知道
16 000020.SZA 2017-08-01 0.0 深圳中恒华发股份有限公司 民营企业 4.211734e+05 999.0 他是民营企业,税负真的不轻
5 000007.SZA 2017-08-01 10004406.0 深圳市全新好股份有限公司 民营企业 2.768926e+05 999.0 他是民营企业,税负真的不轻
40 000001.SZA 2017-08-03 98421938.0 平安银行股份有限公司 公众企业 6.214000e+09 999.0 不是民营企业,具体是啥还不知道

在处理数据时,最好的方式不是删除数据,而是恰当地填充数据。 下面构造新的数据集,做示例操作。

In [1180]:
df_test.loc[23] = np.nan
df_test.loc[[16,5],'volume'] = np.nan #构造练习数据集
df_test
Out[1180]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
23 NaN NaN NaN NaN NaN NaN NaN NaN NaN
47 000009.SZA 2017-08-03 69392114.0 中国宝安集团股份有限公司 公众企业 3.347200e+07 NaN 999.0 不是民营企业,具体是啥还不知道
16 000020.SZA 2017-08-01 NaN 深圳中恒华发股份有限公司 民营企业 4.211734e+05 NaN 999.0 他是民营企业,税负真的不轻
5 000007.SZA 2017-08-01 NaN 深圳市全新好股份有限公司 民营企业 2.768926e+05 NaN 999.0 他是民营企业,税负真的不轻
40 000001.SZA 2017-08-03 98421938.0 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999.0 不是民营企业,具体是啥还不知道
49 NaN NaN NaN NaN NaN NaN NaN NaN NaN
In [1181]:
df_test.fillna(0) #填充所有缺失数据为0
Out[1181]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
23 0 0 0.0 0 0 0.000000e+00 0.0000 0.0 0
47 000009.SZA 2017-08-03 69392114.0 中国宝安集团股份有限公司 公众企业 3.347200e+07 0.0000 999.0 不是民营企业,具体是啥还不知道
16 000020.SZA 2017-08-01 0.0 深圳中恒华发股份有限公司 民营企业 4.211734e+05 0.0000 999.0 他是民营企业,税负真的不轻
5 000007.SZA 2017-08-01 0.0 深圳市全新好股份有限公司 民营企业 2.768926e+05 0.0000 999.0 他是民营企业,税负真的不轻
40 000001.SZA 2017-08-03 98421938.0 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999.0 不是民营企业,具体是啥还不知道
49 0 0 0.0 0 0 0.000000e+00 0.0000 0.0 0
In [1184]:
df_test.fillna({'date':'1988-09-01','volume':'20000000'}) # 对不同列的缺失数据填充不同的值
Out[1184]:
instrument date volume company_name company_type fs_net_profit fs_roe open_int 乱加的一列
23 NaN 1988-09-01 20000000 NaN NaN NaN NaN NaN NaN
47 000009.SZA 2017-08-03 6.93921e+07 中国宝安集团股份有限公司 公众企业 3.347200e+07 NaN 999.0 不是民营企业,具体是啥还不知道
16 000020.SZA 2017-08-01 20000000 深圳中恒华发股份有限公司 民营企业 4.211734e+05 NaN 999.0 他是民营企业,税负真的不轻
5 000007.SZA 2017-08-01 20000000 深圳市全新好股份有限公司 民营企业 2.768926e+05 NaN 999.0 他是民营企业,税负真的不轻
40 000001.SZA 2017-08-03 9.84219e+07 平安银行股份有限公司 公众企业 6.214000e+09 3.0319 999.0 不是民营企业,具体是啥还不知道
49 NaN 1988-09-01 20000000 NaN NaN NaN NaN NaN NaN
In [1185]:
df_test.volume.fillna(df_test.volume.mean()) #采用平均值填充
Out[1185]:
23    83907026.0
47    69392114.0
16    83907026.0
5     83907026.0
40    98421938.0
49    83907026.0
Name: volume, dtype: float64
In [1186]:
df_test.volume.fillna(method= 'ffill') #向前填充('ffill')或者向后填充('bfill')
Out[1186]:
23           NaN
47    69392114.0
16    69392114.0
5     69392114.0
40    98421938.0
49    98421938.0
Name: volume, dtype: float64
In [1187]:
df_test.volume.fillna(method= 'ffill',limit= 1) #限制向前或者向后填充行数
Out[1187]:
23           NaN
47    69392114.0
16    69392114.0
5            NaN
40    98421938.0
49    98421938.0
Name: volume, dtype: float64

11.数据保存

将清理后的数据保存在平台上:

In [1188]:
df.to_csv('df_Pandaslearning') #保存数据

至此,Pandas中基础用法以基本介绍完毕,欢迎参照示例多多练习、运用。


【宽客学院】如何选出符合一定条件的股票
【宽客学院】如何选出符合一定条件的股票(改)