@@ -106,21 +106,21 @@ DataFrame是一种二维的数据结构,非常接近于电子表格或者类
106106 >>> data = {"name":["yahoo","google","facebook"], "marks":[200,400,800], "price":[9, 3, 7]}
107107 >>> f1 = DataFrame(data)
108108 >>> f1
109- marks name price
110- 0 200 yahoo 9
111- 1 400 google 3
112- 2 800 facebook 7
109+ marks name price
110+ 0 200 yahoo 9
111+ 1 400 google 3
112+ 2 800 facebook 7
113113
114114这是定义一个DataFrame对象的常用方法——使用dict定义。字典的“键”("name","marks","price")就是DataFrame的columns的值(名称),字典中每个“键”的“值”是一个列表,它们就是那一竖列中的具体填充数据。上面的定义中没有确定索引,所以,按照惯例(Series中已经形成的惯例)就是从0开始的整数。从上面的结果中很明显表示出来,这就是一个二维的数据结构(类似excel或者mysql中的查看效果)。
115115
116116上面的数据显示中,columns的顺序没有规定,就如同字典中键的顺序一样,但是在DataFrame中,columns跟字典键相比,有一个明显不同,就是其顺序可以被规定,向下面这样做:
117117
118118 >>> f2 = DataFrame(data, columns=['name','price','marks'])
119119 >>> f2
120- name price marks
121- 0 yahoo 9 200
122- 1 google 3 400
123- 2 facebook 7 800
120+ name price marks
121+ 0 yahoo 9 200
122+ 1 google 3 400
123+ 2 facebook 7 800
124124
125125跟Series类似的,DataFrame数据的索引也能够自定义。
126126
@@ -142,9 +142,9 @@ DataFrame是一种二维的数据结构,非常接近于电子表格或者类
142142 >>> f3 = DataFrame(data, columns=['name', 'price', 'marks', 'debt'], index=['a','b','c'])
143143 >>> f3
144144 name price marks debt
145- a yahoo 9 200 NaN
146- b google 3 400 NaN
147- c facebook 7 800 NaN
145+ a yahoo 9 200 NaN
146+ b google 3 400 NaN
147+ c facebook 7 800 NaN
148148
149149读者还要注意观察上面的显示结果。因为在定义f3的时候,columns的参数中,比以往多了一项('debt'),但是这项在data这个字典中并没有,所以debt这一竖列的值都是空的,在Pandas中,空就用NaN来代表了。
150150
@@ -153,17 +153,17 @@ DataFrame是一种二维的数据结构,非常接近于电子表格或者类
153153 >>> newdata = {"lang":{"firstline":"python","secondline":"java"}, "price":{"firstline":8000}}
154154 >>> f4 = DataFrame(newdata)
155155 >>> f4
156- lang price
157- firstline python 8000
158- secondline java NaN
156+ lang price
157+ firstline python 8000
158+ secondline java NaN
159159
160160在字典中就规定好数列名称(第一层键)和每横行索引(第二层字典键)以及对应的数据(第二层字典值),也就是在字典中规定好了每个数据格子中的数据,没有规定的都是空。
161161
162162 >>> DataFrame(newdata, index=["firstline","secondline","thirdline"])
163- lang price
164- firstline python 8000
165- secondline java NaN
166- thirdline NaN NaN
163+ lang price
164+ firstline python 8000
165+ secondline java NaN
166+ thirdline NaN NaN
167167
168168如果额外确定了索引,就如同上面显示一样,除非在字典中有相应的索引内容,否则都是NaN。
169169
@@ -186,10 +186,10 @@ DataFrame对象的columns属性,能够显示素有的columns名称。并且,
186186
187187 >>> f3['debt'] = 89.2
188188 >>> f3
189- name price marks debt
190- a yahoo 9 200 89.2
191- b google 3 400 89.2
192- c facebook 7 800 89.2
189+ name price marks debt
190+ a yahoo 9 200 89.2
191+ b google 3 400 89.2
192+ c facebook 7 800 89.2
193193
194194除了能够统一赋值之外,还能够“点对点”添加数值,结合前面的Series,既然DataFrame对象的每竖列都是一个Series对象,那么可以先定义一个Series对象,然后把它放到DataFrame对象中。如下:
195195
@@ -199,26 +199,26 @@ DataFrame对象的columns属性,能够显示素有的columns名称。并且,
199199将Series对象(sdebt变量所引用) 赋给f3[ 'debt'] 列,Pandas的一个重要特性——自动对齐——在这里起做用了,在Series中,只有两个索引("a","c"),它们将和DataFrame中的索引自动对齐。于是乎:
200200
201201 >>> f3
202- name price marks debt
203- a yahoo 9 200 2.2
204- b google 3 400 NaN
205- c facebook 7 800 3.3
202+ name price marks debt
203+ a yahoo 9 200 2.2
204+ b google 3 400 NaN
205+ c facebook 7 800 3.3
206206
207207自动对齐之后,没有被复制的依然保持NaN。
208208
209209还可以更精准的修改数据吗?当然可以,完全仿照字典的操作:
210210
211211 >>> f3["price"]["c"]= 300
212212 >>> f3
213- name price marks debt
214- a yahoo 9 200 2.2
215- b google 3 400 NaN
216- c facebook 300 800 3.3
213+ name price marks debt
214+ a yahoo 9 200 2.2
215+ b google 3 400 NaN
216+ c facebook 300 800 3.3
217217
218218这些操作是不是都不陌生呀,这就是Pandas中的两种数据对象。
219219
220220------
221221
222222[ 总目录] ( ./index.md )   ;  ;  ; |  ;  ;  ; [ 上节:Pandas使用(1)] ( ./310.md )   ;  ;  ; |  ;  ;  ; [ 下节:Pandas使用(3)] ( ./312.md )
223223
224- 如果你认为有必要打赏我,请通过支付宝:** qiwsir@126.com ** ,不胜感激。
224+ 如果你认为有必要打赏我,请通过支付宝:** qiwsir@126.com ** ,不胜感激。
0 commit comments