Pandas简明教程:二、Pandas基本数据结构-DataFrame与Series
文章目錄
- 1、什么是表格?
- 2、DataFrame類型
- 3、Series類型
- 本系列教程教程完整目錄:
1、什么是表格?
| 0 | 1 | 張三 | 男 | 2000 | 1500 | 主犯 |
| 1 | 2 | 張三 | 男 | 2000 | 1000 | 主犯 |
| 2 | 3 | 張三 | 女 | 2000 | 15000 | 主犯 |
| 3 | 4 | 張三 | 女 | 2000 | 1500 | 主犯 |
| 4 | 5 | 張三 | 女 | 2000 | 1500 | 主犯 |
| 5 | 2 | 李四 | 男 | 1800 | 1300 | 從犯 |
| 6 | 3 | 李四 | 男 | 1800 | 1300 | 從犯 |
| 7 | 4 | 李四 | 男 | 1800 | 1300 | 從犯 |
| 8 | 5 | 李四 | 男 | 1800 | 1300 | 從犯 |
| 9 | 1 | 王五 | 女 | 1800 | 1300 | 龍套 |
| 10 | 2 | 王五 | 女 | 1800 | 1300 | 龍套 |
| 11 | 3 | 王五 | 女 | 1800 | 1300 | 龍套 |
| 12 | 4 | 王五 | 女 | 1800 | 1300 | 龍套 |
以上表為例,按照一般的理解,表格一般包含以下屬性:
-
表頭:即上表中的 ”月份,姓名,性別,應發工資,實發工資,職位“。
注意,這里第一列的空白處照常而言也是一個表頭,不過在Pandas中它有另外的含義。
-
數據主體:從第二行第一列開始,到右下角的”龍套“,這一塊區域全部是表格的數據主體。
- 表格行與列:行與列是包含在數據主體中的部分。
-
索引列:這是Pandas專門設計的一個部分,設置它一方面為了定位方便,另一方面它也有利于復雜表格的操作,今后會講到。
2、DataFrame類型
現在我們先用Pandas錄入上述表格數據:
import pandas as pd df = pd.DataFrame({'月份': [1,2,3,4,5,2,3,4,5,1,2,3,4],'姓名':['張三','張三','張三','張三','張三','李四','李四','李四','李四','王五','王五','王五','王五'],'性別':['男','男','女','女','女','男','男','男','男','女','女','女','女'],'應發工資':[2000,2000,2000,2000,2000,1800,1800,1800,1800,1800,1800,1800,1800],'實發工資':[1500,1000,15000,1500,1500,1300,1300,1300,1300,1300,1300,1300,1300],'職位':['主犯','主犯','主犯','主犯','主犯','從犯','從犯','從犯','從犯','龍套','龍套','龍套','龍套'] })結果:
df月份 姓名 性別 應發工資 實發工資 職位 0 1 張三 男 2000 1500 主犯 1 2 張三 男 2000 1000 主犯 2 3 張三 女 2000 15000 主犯 3 4 張三 女 2000 1500 主犯 4 5 張三 女 2000 1500 主犯 5 2 李四 男 1800 1300 從犯 6 3 李四 男 1800 1300 從犯 7 4 李四 男 1800 1300 從犯 8 5 李四 男 1800 1300 從犯 9 1 王五 女 1800 1300 龍套 10 2 王五 女 1800 1300 龍套 11 3 王五 女 1800 1300 龍套 12 4 王五 女 1800 1300 龍套上述代碼的內容很容易理解,首先是將pandas庫導入并將設別名為pd,其次再是調用DataFrame的構造函數實例化該對象,并賦值給df。這里表格的信息我們是采用dict的格式錄入的。
另外觀察到另一個問題,在錄入數據時并沒有提供第一列0,...,12這些數據,但df變量就自動有了上述內容。這一列就是表格的索引列。
那么此時再來對照表格認識一下DataFrame的各個基本屬性。
# 表頭 df.columnsIndex(['月份', '姓名', '性別', '應發工資', '實發工資', '職位'], dtype='object') # 索引 df.indexRangeIndex(start=0, stop=13, step=1) # 數據主體 df.valuesarray([[1, '張三', '男', 2000, 1500, '主犯'],[2, '張三', '男', 2000, 1000, '主犯'],[3, '張三', '女', 2000, 15000, '主犯'],[4, '張三', '女', 2000, 1500, '主犯'],[5, '張三', '女', 2000, 1500, '主犯'],[2, '李四', '男', 1800, 1300, '從犯'],[3, '李四', '男', 1800, 1300, '從犯'],[4, '李四', '男', 1800, 1300, '從犯'],[5, '李四', '男', 1800, 1300, '從犯'],[1, '王五', '女', 1800, 1300, '龍套'],[2, '王五', '女', 1800, 1300, '龍套'],[3, '王五', '女', 1800, 1300, '龍套'],[4, '王五', '女', 1800, 1300, '龍套']], dtype=object)這里可以看到,表頭是Index類型(Pandas類型),索引列是RangeIndex類型,values則是普通的array類型。前面兩個類型在用到的時候我們再介紹,如果好奇的話可以先點擊鏈接自行查看。
接下來再簡單查看一下df中的變量類型:
df.dtypes月份 int64 姓名 object 性別 object 應發工資 int64 實發工資 int64 職位 object dtype: object這里除了各列的類型以外,還包括一個它自己的類型object。
3、Series類型
先看一個例子:
ss=df['姓名']type(ss) pandas.core.series.Seriesss0 張三 1 張三 2 張三 3 張三 4 張三 5 李四 6 李四 7 李四 8 李四 9 王五 10 王五 11 王五 12 王五 Name: 姓名, dtype: object結合DataFrame的構造函數的用法其實可以做出合理推測 – 它的索引方式應該和dict類似。上述代碼即證實了這一點,但仔細觀察第3-4行,可以看到取出姓名這一列之后的對象變成了Series。它是Pandas中另外一個重要的數據結構。
Series對象的結構實際上與DataFrame基本一致,唯一不同的在于Series的數據主體只有一維,而DataFrame的數據可以有多維。 一種簡單的理解方式是:Series是一個表的一列,同時它帶有Index類型的屬性。作為表的一列,它自然也有’表頭’,不過此時它不再叫column而是叫name.
ss.name '姓名'自然地,Series通常也可以直接轉換為DataFrame,如:
ds = pd.DataFrame(ss)type(ds) pandas.core.frame.DataFrame或者直接調用方法:
type(ss.to_frame()) pandas.core.frame.DataFrame然而,這里需要注意的是,由多個Series轉回DataFrame時則稍嫌麻煩。可能有同學容易想到以下的方式:
ss1 = df['月份']ss2 = df['姓名']pd.DataFrame([ss1,ss2])0 1 2 3 4 5 6 7 8 9 10 11 12 月份 1 2 3 4 5 2 3 4 5 1 2 3 4 姓名 張三 張三 張三 張三 張三 李四 李四 李四 李四 王五 王五 王五 王五注意,此時表格沒有變成原來的形狀,而對應的信息屬性其實也發生了變化。”月份“,”姓名“都變成了索引Index,而上面的數字此時其實仍然是屬性。關于這個問題后面講操作的時候再討論,這里先直接給出正確的做法:
dd = pd.DataFrame({ ss1.name: ss1.values,ss2.name: ss2.values} )dd月份 姓名 0 1 張三 1 2 張三 2 3 張三 3 4 張三 4 5 張三 5 2 李四 6 3 李四 7 4 李四 8 5 李四 9 1 王五 10 2 王五 11 3 王五 12 4 王五這種做法是最為操守的,其思路是利用Series中對應的信息先構造一個dict,再利用dict生成DataFrame。當然還可以這樣做:
dd2 = pd.DataFrame()dd2[ss1.name] = ss1.valuesdd2[ss2.name] = ss2.valuesdd2月份 姓名 0 1 張三 1 2 張三 2 3 張三 3 4 張三 4 5 張三 5 2 李四 6 3 李四 7 4 李四 8 5 李四 9 1 王五 10 2 王五 11 3 王五 12 4 王五如果熟悉Python的基本數據結構及其操作的情況下,也可以靈活地處理更為復雜的情況,這里不再贅述。
當然還有更多靈活的操作,可以參考相關資料,如:
pandas中Series,DataFrame的連接(拼接)
更多神奇的操作還可以在官方文檔中看到:Merge, join, and concatenate
本系列教程教程完整目錄:
一、Pandas簡介與安裝
二、Pandas基本數據結構-DataFrame與Series
三、Pandas文件讀寫
四、Pandas數據索引方式
五、Pandas簡單統計操作及通用方式
六、Pandas條件查詢
七、Pandas缺失數據的處理(數據清洗基礎)
八、Pandas數據透視表
九、表的合并、連接、拼接(數據聚合基礎)
總結
以上是生活随笔為你收集整理的Pandas简明教程:二、Pandas基本数据结构-DataFrame与Series的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pandas简明教程:一、Pandas简
- 下一篇: Pandas简明教程:四、Pandas数