玩轉Pandas,讓數據處理更easy系列2
01
回顧
上一篇總結了Pandas中最重要的兩個數據結構:Series和DataFrame,前者相當於更加強大的一維數組,是數組和字典的組合,因為既可以按照位置,也能通過鍵獲取訪問元素;而DataFrame是Series的容器,二維的數組,有行、列標籤。正是通過這兩個強大的數據結構和基於它們建立的各種操作,才使得Pandas稱霸數據處理領域工具庫,關於這篇請參考:
玩轉Pandas,讓數據處理更easy系列1
02
DataFrame結構剖析
因為DataFrame本質上是二維數組,其中values是Numpy,行索引是index,列索引是 columns的組合。接下來,創建一個pd_data,分別作如下操作:
#創建pd_data,values是二維list,index默認(0,1,2,...),columns: [A,B,C]
pd_data = pd.DataFrame([ [4, 9, 1], [3, 5, 2] ], columns = list(ABC) )
獲取values,可以看出是ndarray的Numpy數組,因此可以使用ndarray實例的一切API:
pd.values
獲取index,可以看到返回RangeIndex實例,是默認的行索引,查源碼可以看出繼承關係如下:
Index
|
NumericIndex
|
Int64Index
|
RangeIndex
pd_data.index
獲取columns,直接返回Index實例,可以看到pd_data的列索引:
pd_data.columns
以上,可以看出pd_data的基本組成結構,以及如何拆分出所需要的values和索引(index,columns)結構。
03
DataFrame索引
DataFrame的索引可以按照一維索引方式,或二維索引方式。
一維索引方式,類似於numpy等的冒號直接索引,但是這種方法只能通過列索引標籤獲取,如下,返回的是一個Series實例,name是索引的列標籤名稱。
pd_data[B]
二維索引常用的 loc 介面,提供二維的訪問方法,用法如下:
pd_data.loc[1,B]
得到是元素5,即行索引標籤為1,列標籤為『B』的元素
插播:
- loc的作用不是僅僅用作訪問某個已存在的元素。
- 因為說過,columns, index的作用類似於字典,言外之意,如果訪問的標籤不存在,它會自動添加進去,如下:
pd_data.loc[:,D] = 10 #增加一列,列標籤是D
pd_data[D] = 10 # 直接這樣寫更精簡,但是默認必須為添加列標籤
pd_data.loc[-1,:] = 0 #增加一行,行標籤是 -1
pd_data[-1] = -11 # No! 這樣寫不是添加一行
04
DataFrame刪除某列或某行
刪除DataFrame的某行或某列,調用drop(),參數是標籤值,如下:
現在的pd_data:
刪除E列,ok, 調用 drop(E,axis=1),axis參數必須給出!
pd_data = pd_data.drop(E,axis=1) #注意必須賦值給pd_data,因為這不是in-place drop
刪除標籤為-1的行:
pd_data = pd_data.drop(-1,axis=0)
測試如果標籤為-1的行有多個,刪除會發生,再構造標籤為-1的行:
pd_data = pd_data.append(pd.Series([1]*5, index=[A,B,C,D,-1], name=1))
pd_data
刪除標籤為1的行,可以看到同時刪除了兩行。
pd_data = pd_data.drop(1,axis=0)
pd_data
以上總結了,DataFrame的結構,索引,增加,刪除操作,如有問題,請指針。
下載源碼,請在公眾號後台回復: pandas
更多文章:
深度學習|大師之作,必是精品
演算法channel關鍵詞和文章索引
演算法優化|說說哨兵(sentinel value)
Numpy|需要信手拈來的功能
機器學習|快速排序思想求topk
機器學習|支持向量機參數求解
微信群: gz113097485
QQ交流群:646901659
演算法channel ∣原創乾貨分享
http://weixin.qq.com/r/cjhGXpjE88WMrdw9921g (二維碼自動識別)
長按,識別二維碼,加關注
推薦閱讀:
※Python的函數是第一類對象(函數特性總結)
※Python 3.7 將引入 dataclass 裝飾器
※廢話少說:Python 這麼牛逼的 6 個原因是?
※解答初學者對for i,j 的疑惑
※Scrapy連接到各類資料庫(SQLite,Mysql,Mongodb,Redis)