Pandas_數據結構
- 2019 年 12 月 30 日
- 筆記
由AI派提供學習,本文摘要有部分雷同。
知識是活的,方法更是多式多樣,技術沒有邊界!!

`導入相關庫 In [1]: import numpy as np import pandas as pd `Pandas常用的數據結構有兩種: Series 和 DataFrame (這些數據結構都是構建在Numpy 數組之上的,則意味着效率很高) Series series 是一個帶有名稱 & 索引的一堆數組。 ·數據類型可以是整數、浮點數、字符串以及python的對象等! EG: 我們可以通過series 存儲年齡: 18/19/20/21/22 操作: 只需要將要存儲的數據構建成一個數組,然後賦值給data 參數即可。 #構建索引 In [2]: name = pd.Index(["A","B","C","D","E"],name = "name") In [ ]: In [3]: #構建Series age = pd.Series(data=[18,19,20,21,22],index=name, name="user_age") print(age) name A 18 B 19 C 20 D 21 E 22 Name: user_age, dtype: int64 In [ ]: In [4]: #指定數據類型為浮點型 age = pd.Series(data=[18,19,20,21,22],index = name,name="user_age",dtype=float) print(age) name A 18.0 B 19.0 C 20.0 D 21.0 E 22.0 Name: user_age, dtype: float64 In [ ]: Series 特點: 包含了 dict的特點,也就是意味着可以使用與dict類似的一些操作。我們可以將index中的元素看成是dict中的key。 In [6]: #獲取第一個元素 print(age[0]) 18.0 In [ ]: In [7]: #獲取前三個元素 print(age[:3]) name A 18.0 B 19.0 C 20.0 Name: user_age, dtype: float64 In [ ]: In [8]: #獲取年齡大女20歲的元素 print(age[age>20]) name D 21.0 E 22.0 Name: user_age, dtype: float64 In [ ]: 獲取第四個和第二個元素 In [9]: #可以看到,無論我們通過切片如何操作 Series ,它都能夠自動對齊 index。 print(age[[3,1]]) name D 21.0 B 19.0 Name: user_age, dtype: float64 In [ ]: Series 的向量化操作 series 與 ndarray 一樣,支持向量化操作的。同時也可以傳遞給大多數期望ndarray的Numpy方法! In [10]: #針對年齡 整體+ 1 print(age + 1) name A 19.0 B 20.0 C 21.0 D 22.0 E 23.0 Name: user_age, dtype: float64 In [ ]: In [11]: print(np.exp(age)) name A 6.565997e+07 B 1.784823e+08 C 4.851652e+08 D 1.318816e+09 E 3.584913e+09 Name: user_age, dtype: float64 In [ ]: DataFrame - 是一個帶有 索引的二維數據結構。 - 每列可以有自己的名稱,並且可以有不同的數據類型。(即可以想像是 Excel表格) - 亦或者當成 數據庫中的一張表!!! 實例 - 存儲更多的用戶信息 - 性別 年齡 地區 - dict 來構鍵,key為需要存儲的信息,value 則是信息的列表。 - 然後通過 dict 傳遞給data參數。 In [8]: index = pd.Index(data=["張三","李","王","年少風"],name="name") data = { "Sex":["男","女","女","男"], "City":["西安","上海","北京","朝陽"] } user_info = pd.DataFrame(data=data, index=index) user_info Out[8]: Sex City name 張三 男 西安 李 女 上海 王 女 北京 年少風 男 朝陽 In [ ]: #可以看到,成功構建了一個DataFrame。 In [11]: data = [ [12,"北京"], [18,"山西"], [21,"上海"], [25,"西雅圖"] ] colums = ["age","city"] user_info = pd.DataFrame(data=data, index=index,columns=colums) user_info Out[11]: age city name 張三 12 北京 李 18 山西 王 21 上海 年少風 25 西雅圖 In [ ]: #訪問行 在生成DataFrame之後,可以看到,每一行就表示某一個用戶的信息。假如我要找年少風,需要如何來實現呢? 那麼就是通過索引名來訪問某行。 這種辦法需要藉助loc方法。 In [12]: user_info.loc["年少風"] Out[12]: age 25 city 西雅圖 Name: 年少風, dtype: object In [17]: #方案二 #除了通過索引名稱來找到這一行數據以外,還可以通過這行所在的位置 來選擇這一行。 user_info.iloc[3] Out[17]: age 25 city 西雅圖 Name: 年少風, dtype: object In [ ]: #訪問列 1· 如何訪問如數據之外,那麼下個問題來了,列如何訪問呢? 2·正解---我們可以通過屬性(即 列名)的方式來訪問列的數據。 3· 也可以通過column的形式來訪問該列的數據。 In [ ]: # 如何獲取所有用戶的年齡呢? ·來波騷操作吧 In [18]: user_info.age Out[18]: name 張三 12 李 18 王 21 年少風 25 Name: age, dtype: int64 In [19]: user_info["age"] Out[19]: name 張三 12 李 18 王 21 年少風 25 Name: age, dtype: int64 In [20]: #倘若你想要同時獲取 年齡和城市 該如何操作呢? # 加入列名即可 user_info[["age","city"]] Out[20]: age city name 張三 12 北京 李 18 山西 王 21 上海 年少風 25 西雅圖 In [21]: #也可以變換列名的順序,方便你的需求 user_info[["city","age"]] Out[21]: city age name 張三 北京 12 李 山西 18 王 上海 21 年少風 西雅圖 25 In [ ]: #新增or刪 列的操作 生成DataFrame之後,你想再加入新的信息,比如性別, 那麼該如何操作呢? 1)如果所有性別都一樣,我們通過傳入一個標量,pandas自動會廣播來填充所有位置 2)那如果有不同的呢 In [22]: #案例1 user_info["sex"] = "男" user_info Out[22]: age city sex name 張三 12 北京 男 李 18 山西 男 王 21 上海 男 年少風 25 西雅圖 男 In [ ]: #案例2 性別不一致的情況下,我們可以通過like-list 來添加新的一列。 In [23]: user_info["Sex_1"]=["男","女","女","男"] user_info Out[23]: age city sex Sex_1 name 張三 12 北京 男 男 李 18 山西 男 女 王 21 上海 男 女 年少風 25 西雅圖 男 男 In [24]: # 想要刪除其中某一列,可以使用pop方法來完成。後接列名即可!!! user_info.pop("sex") user_info Out[24]: age city Sex_1 name 張三 12 北京 男 李 18 山西 女 王 21 上海 女 年少風 25 西雅圖 男 In [25]: #假設你想要保證原有的DataFrame 不改變的話,我們可以通過 assign方法來創建新的一列。 user_info.assign(age_add_one = user_info["age"]+1) Out[25]: age city Sex_1 age_add_one name 張三 12 北京 男 13 李 18 山西 女 19 王 21 上海 女 22 年少風 25 西雅圖 男 26 In [26]: # 如果性別為男 ,給它標識為1,否則為0 user_info.assign(sex_code = np.where(user_info["Sex_1"] == "男",1,0)) Out[26]: age city Sex_1 sex_code name 張三 12 北京 男 1 李 18 山西 女 0 王 21 上海 女 0 年少風 25 西雅圖 男 1 In [ ]:


讓心情去旅行
欣賞和喜歡你擁有的東西,而不是你沒有的東西,你才能快樂。