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 [ ]:  

讓心情去旅行

欣賞和喜歡你擁有的東西,而不是你沒有的東西,你才能快樂。