Pandas常用數據結構


Pandas 概述

  Pandas(Python Data Analysis Library)是基於NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。Pandas 納入了大量庫和一些標准的數據模型,提供了高效地操作大型數據集所需的工具。Pandas提供了大量能使我們快速便捷地處理數據的函數和方法。它是使Python成為強大而高效的數據分析環境的重要因素之一。

  Pandas專用於數據預處理和數據分析的Python第三方庫,最適合處理大型結構化表格數據

  •   Pandas是2008年Wes McKinney於AQR資本做量化分析師時創建
  •   Pandas借鑒了R的數據結構
  •   Pandas基於Numpy搭建,支持Numpy中定義的大部分計算
  •   Pandas含有使數據分析工作更簡單高效的高級數據結構和操作工具
  •   Pandas底層用Cython和C做了速度優化,極大提高了執行效率

  Pandas 常用的數據結構有兩種:Series 和 DataFrame

Pandas引入約定

from pandas import Series, DataFrame
import pandas as pd

Python、Numpy和Pandas對比

Python

  • list:Python自帶數據類型,主要用一維,功能簡單,效率低
    •   Dict:Python自帶數據類型,多維鍵值對,效率低

Numpy

  • ndarray:Numpy基礎數據類型,單一數據類型
  • 關注數據結構/運算/維度(數據間關系)

Pandas

  • Series:1維,類似帶索引的1維ndarray
  • DataFrame:2維,表格型數據類型,類似帶行/列索引的2維ndarray 關注數據與索引的關系(數據實際應用)

從實用性、功能強弱和和可操作性比較:list < ndarray < Series/DataFrame

數據規整和分析工作中,ndarry數組作為必要補充,大部分數據盡量使用Pandas數據類型

Pandas數據結構

Pandas的核心為兩大數據結構,數據分析相關所有事物都是圍繞着這兩種結構進行的

  • Series:用於存儲一個序列的一維數據
  • DataFrame:DataFrame作為更復雜的數據結構,則用於存儲多維數據

雖然這些數據結構不能解決所有的問題,但它們為大多數應用提供了有效和強大的工具。就簡潔性
而言,他們理解和使用起來都很簡單。

Series 簡介

  Series 是一個帶有 名稱索引 的 一維數組,在 Series 中包含的數據類型可以是整數、浮點、字符串、Python對象等。

基礎屬性:

  • values:返回元素
  • index:返回索引
  • columns:返回列名
  • dtypes:返回類型
  • size:返回元素個數
  • ndim:返回維度數
  • shape:返回數據形狀(行列數目)

Series 創建

  1. 簡單構建一個含索引和年齡的用戶信息

import pandas as pd
user_info = pd.Series(data=[24, 45, 33, 62])
user_info

# 結果如下
0    24
1    45
2    33
3    62
dtype: int64

  2. 將索引自定義為名字,即將年齡與用戶聯系起來

# 構建索引  
# name="user_index":為索引起一個名字
user_index=pd.Index(['Tom','Scott','Jass','Jame'],name="user_index")
# 構建Series
# name="user_info":為 Series 起個名字
user_info = pd.Series(data=[24, 45, 33, 62],index=user_index,name="user_info",dtype=float)
# 結果如下
user_index
Tom      24.0
Scott    45.0
Jass     33.0
Jame     62.0
Name: user_info, dtype: float64

Series 訪問

  Series 包含了 dict 的特點,也就意味着可以使用與 dict 類似的一些操作。我們可以將 index 中的元素看成是 dict 中的 key

 

# 查看所有的值列表
user_info.values

# 查看所有的索引列表
user_info.index

# 獲取Tom的年齡
user_info['Tom']  # 24.0

# 可以通過 get 方法來獲取。通過這種方式的好處是當索引不存在時,不會拋出異常。
user_info['Scott']  # 45.0

  Series 除了像 dict 外,也非常像 ndarray,這也就意味着可以采用切片操作

# 獲取第一個元素
user_info[0]  # 24.0

# 獲取前三個元素(左閉右開)
user_info[:3]
"""
user_index
Tom      24.0
Scott    45.0
Jass     33.0
Name: user_info, dtype: float64
"""

# 獲取年齡大於50的元素
user_info[user_info>50]
"""
user_index
Jame    62.0
Name: user_info, dtype: float64
"""

# 獲取第4個和第二個元素
user_info[[3, 1]]
"""
user_index
Jame     62.0
Scott    45.0
Name: user_info, dtype: float64
"""

# 查看去重后的元素
user_info.unique()

# 計算不同元素出現的次數
user_info.value_counts()

# 判斷元素所屬關系
s.isin([24,32])

# 將元素中的值取出判斷是否出現在指定數組中
s[s.isin([24,32])]

Series 的向量化操作

  Series 與 ndarray 一樣,也是支持向量化操作的。同時也可以傳遞給大多數期望 ndarray 的NumPy 方法。

# 將所有人的年齡加1
user_info + 1
"""
user_index
Tom      25.0
Scott    46.0
Jass     34.0
Jame     63.0
Name: user_info, dtype: float64
"""

DataFrame 簡介

  DataFrame 是一個帶有索引二維數據結構,每列可以有自己的名字,並且可以有不同的數據類型。你可以把它想象成一個 excel 表格或者數據庫中的一張表,DataFrame 是最常用的 Pandas 對象。

基礎屬性:

  • values:返回元素
  • index:返回索引
  • columns:返回列名
  • dtypes:返回類型
  • size:返回元素個數
  • ndim:返回維度數
  • shape:返回數據形狀(行列數目)

DataFrame 創建

  構建方式一:構建一個dict,將dict傳遞給data參數

data={
    "age":[12,23,45,37],
    "city":["chongqing","nanjing","wuhan","shenyang"]
}
index = pd.Index(['Tom','Scott','Jass','Jame'],name="user_name")
pd.DataFrame(data=data,index=index)

   由上表我們可以看到,DataFrame已經成功構建,且索引是用戶姓名,另外兩列信息分別為用戶年齡和城市信息

  構建方式二:先構建一個二維數組,然后再生成一個列名稱列表。

data=[[12,"shenyang"],
     [23,"chongqing"],
     [45,"wuhan"],
     [37,"nanjing"]
     ]
index = pd.Index(['Tom','Scott','Jass','Jame'],name="user_index")
# 標簽
column = ["age","city"]
user_info = pd.DataFrame(data=data,index=index,columns=column)
user_info

DataFrame 訪問

  訪問行  -->  通過索引名  -->  loc方法

# 通過索引訪問某個人的數據
user_info.loc[['Tom']]

# 通過索引訪問指定人的數據
user_info.loc[['Tom','Jass']]

  訪問行  -->  通過行所在位置  -->  iloc方法

# 訪問第一個人的信息
user_info.iloc[0]

# 訪問前3個人的信息
user_info.iloc[0:3]

  訪問列  -->  通過屬性(.列名)

user_info.age
"""
user_index
Tom      12
Scott    23
Jass     45
Jame     37
Name: age, dtype: int64
"""

  訪問列  -->  通過[column]

# 獲取一列數據
user_info[["age"]]

# 獲取多列數據
user_info[["age","city"]]
"""
            age    city
user_index        
Tom         12    shenyang
Scott       23    chongqing
Jass        45    wuhan
Jame        37    nanjing
"""
     

新增列

  通過傳入一個標量,Pandas 會自動幫我們廣播來填充所有的位置

# 添加的信息一致
user_info["sex"]="male"
user_info
"""
      age    city      sex
user_index            
Tom     12    shenyang    male
Scott   23    chongqing   male
Jass    45    wuhan      male
Jame    37    nanjing    male
"""

# 添加的指定信息
user_info["sex"]=["male","female","male","male"]
user_info
"""
      age    city      sex
user_index            
Tom    12    shenyang    male
Scott  23    chongqing   female
Jass   45    wuhan      male
Jame   37    nanjing     male
"""

# 在原有信息上新增一列與原有信息相關數據
user_info.assign(age_add_one = user_info["age"] + 1)
"""
        age    city       sex      age_add_one
user_index                    
Tom     12    shenyang    male        13
Scott   23    chongqing   female     24
Jass    45    wuhan      male        46
Jame    37    nanjing     male        38
"""

import numpy as np
user_info.assign(sex_code = np.where(user_info["sex"] == "male", 1, 0))
"""
          age    city       sex    sex_code
user_index                
Tom         12    shenyang   male        1
Scott       23    chongqing  female     0
Jass        45    wuhan      male        1
Jame        37    nanjing    male        1
"""

刪除列

  drop(labels, axis=0, level=None, inplace=False, errors='raise')

參數解釋:

  • lables:接收string或array。代表刪除的行或列的標簽。無默認
  • axis:接收0或1。代表操作的軸向。默認為0
  • levels:接收int或者索引名。代表標簽所在級別。默認為None
  • inplace:接收boolean。代表操作是否對原數據生效。默認為False
# 刪除某一列
user_info.drop(["sex"],axis=1)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM