python 中pandas 库中DataFrame 对⾏和列的操作使⽤⽅法⽤pandas 中的DataFrame 时选取⾏或列:下⾯是简单的例⼦使⽤验证:
import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series (np.arange(3.))data = DataFrame (np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))data ['w'] #选择表格中的'w'列,使⽤类字典属性,返回的是Series 类型data .w #选择表格中的'w'列,使⽤点属性,返回的是Series 类型data [['w']] #选择表格中的'w'列,返回的是DataFrame 类型data [['w','z']] #选择表格中的'w'、'z'列data [0:2] #返回第1⾏到第2⾏的所有⾏,前闭后开,包括前不包括后data [1:2] #返回第2⾏,从0计,返回的是单⾏,通过有前后值的索引形式, #如果采⽤data [1]则报错data .ix[1:2] #返回第2⾏的第三种⽅法,返回的是DataFrame ,跟data [1:2]同data ['a':'b'] #利⽤index 值进⾏切⽚,返回的是**前闭后闭**的DataFrame , #即末端是包含的 data .irow(0) #取data 的第⼀⾏data .icol(0) #取data 的第⼀列data .head() #返回data 的前⼏⾏数据,默认为前五⾏,需要前⼗⾏则data .head(10)data .tail() #返回data 的后⼏⾏数据,默认为后五⾏,需要后⼗⾏则data .tail(10)ser.iget_value(0) #选取ser 序列中的第⼀个ser.iget_value(-1) #选取ser 序列中的最后⼀个,这种轴索引包含索引器的series 不能采⽤ser[-1]去获取最后⼀个,这会引起歧义。data .iloc[-1] #选取DataFrame 最后⼀⾏,返回的是Series data .iloc[-1:] #选取DataFrame 最后⼀⾏,返回的是DataFrame data .loc['a',['w','x']] #返回‘a’⾏'w'、'x'列,这种⽤于选取⾏索引列索引已知data .iat[1,1] #选取第⼆⾏第⼆列,⽤于已知⾏、列位置的选取。
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
39
40import pandas as pd from pandas import Series, DataFrame import numpy as np data = DataFrame(np.arange(15).reshape(3,5),index=['one','two','three'],columns=['a','b','c','d','e'])data Out[7]: a b c d e one 0 1 2 3 4two 5 6 7 8 9three 10 11 12 13 14#对列的操作⽅法有如下⼏种data.icol(0) #选取第⼀列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
E:\Anaconda2\lib\site-packages\spyder\utils\ipython\start_kernel.py:1: FutureWarning: icol(i) is deprecated. Please use .iloc[:,i] # -*- coding: utf-8 -*-Out[35]: one 0two 5three 10Name: a, dtype: int32data['a']Out[8]: one 0two 5three 10Name: a, dtype: int32data.a Out[9]: one 0two 5three 10Name: a, dtype: int32data[['a']]Out[10]: a one 0two 5three 10data.ix[:,[0,1,2]] #不知道列名只知道列的位置时Out[13]: a b c one 0 1 2two 5 6 7three 10 11 12data.ix[1,[0]] #选择第2⾏第1列的值Out[14]: a 5Name: two, dtype: int32data.ix[[1,2],[0]] #选择第2,3⾏第1列的值Out[15]: a two 5three 10data.ix[1:3,[0,2]] #选择第2-4⾏第1、3列的值Out[17]: a c two 5 7three 10 12data.ix[1:2,2:4] #选择第2-3⾏,3-5(不包括5)列的值Out[29]: c d two 7 8data.ix[data.a>5,3]Out[30]: three 13Name: d, dtype: int32data.ix[data.b>6,3:4] #选择'b'列中⼤于6所在的⾏中的第4列,有点拗⼝Out[31]:
d
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
d thre
e 13data.ix[data.a>5,2:4] #选择'a'列中⼤于5所在的⾏中的第3-5(不包括5)列Out[32]: c d three 12 13data.ix[data.a>5,[2,2,2]] #选择'a'列中⼤于5所在的⾏中的第2列并重复3次Out[33]: c c c three 12 12 12#还可以⾏数或列数跟⾏名列名混着⽤data.ix[1:3,['a','e']]Out[24]: a e two 5 9three 10 14data.ix['one':'two',[2,1]]Out[25]: c b one 2 1two 7 6data.ix[['one','three'],[2,2]]Ou
t[26]: c c one 2 2three 12 12data.ix['one':'three',['a','c']]Out[27]: a c one 0 2two 5 7three 10 12data.ix[['one','one'],['a','e','d','d','d']]Out[28]: a e d d d one 0 4 3 3 3one 0 4 3 3 3#对⾏的操作有如下⼏种:data[1:2] #(不知道列索引时)选择第2⾏,不能⽤data[1],可以⽤data.ix[1]Out[18]: a b c d e two 5 6 7 8 9data.irow(1) #选取第⼆⾏Out[36]: a 5b 6c 7d 8e 9Name: two, dtype: int32data.ix[1] #选择第2⾏Out[20]: a 5b 6c 7
d 8
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
最近处理数据时发现当pd.read_csv()数据时有时候会有读取到未命名的列,且该列也⽤不到,⼀般是索引列被换掉后导致的,有强迫症的看着难受,这时候dataframe.drop([columns,])是没法处理的,怎么办呢,
最笨的⽅法是直接给列索引重命名:
d 8
e 9Name: two, dtype: int32data['one':'two'] #当⽤已知的⾏索引时为前闭后闭区间,这点与切⽚稍有不同。Out[22]: a b c d e one 0 1 2 3 4two 5 6 7 8 9data.ix[1:3] #选择第2到4⾏,不包括第4⾏,即前闭后开区间。Out[23]: a b c d e two 5 6 7 8 9three 10 11 12 13 14data.ix[-1:] #取DataFrame 中最后⼀⾏,返回的是DataFrame 类型,**注意**这种取法是有使⽤条件的,只有当⾏索引不是数字索引时才可以使⽤,否则可以选⽤Out[11]: a b c d e three 10 11 12 13 14data[-1:] #跟上⾯⼀样,取DataFrame 中最后⼀⾏,返回的是DataFrame 类型Out[12]: a b c d e three 10 11 12 13 14data.ix[-1] #取DataFrame 中最后⼀⾏,返回的是Series 类型,这个⼀样,⾏索引不能是数字时才可以使⽤Out[13]: a 10b 11c 12d 13e 14Name: three, dtype: int32data.tail(1) #返回DataFrame 中的最后⼀⾏data.head(1) #返回DataFrame 中的第⼀⾏
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
python怎么读csv数据169
170
171
172
173
174
175
176
177
178
重新命名后就可以⽤dataframe.drop([columns])来删除了,当然不⽤我这样全部给列名替换掉了,可以只是改变未命名的那个列,然后删除。不过这个⽤起来总是觉得有点low ,有没有更好的⽅法呢,有,可以不去删除,直接:这样既不改变原有数据,也达到了删除神烦列,当然我这⾥时第0列删除,可以根据实际选择所在的列删除之,⾄于这个原理,可以看下前⾯的对列的操作。data6
Unnamed: 0 high symbol time
date
2016-11-01 0 3317.4 IF1611 18:10:44.8
2016-11-01 1 3317.4 IF1611 06:01:04.5
2016-11-01 2 3317.4 IF1611 07:46:25.52016-11-01 3 3318.4 IF1611 09:30:04.02016-11-01 4 3321.8 IF1611 09:31:lumns = list('abcd')data6 a b c d date 2016-11-01 0 3317.4 IF1611 18:10:44.82016-11-01 1 3317.4 IF1611 06:01:04.52016-11-01 2 3317.4 IF1611 07:46:25.5
2016-11-01 3 3318.4 IF1611 09:30:04.0
2016-11-01 4 3321.8 IF1611 09:31:04.0
12
3456789
1011
1213
1415161718192021
data7 = data6.ix[:,1:]
1
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论