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小时内删除。