Pandas基礎06(異常值的檢測與過濾/抽樣/常用聚合函數/數據聚合)

Pandas基礎06 異常值的檢測與過濾

在數據分析中,異常值(Outliers)是指與其他數據點顯著不同的值。這些值可能由于數據錄入錯誤、設備故障或極端情況而產生,因此在進行數據分析之前,需要對其進行檢測與過濾。本文將介紹如何利用 Pandas 中的一些常見函數,檢測、處理和過濾數據中的異常值,同時對數據進行基本的處理和探索。

3.5.1. describe():查看每一列的描述性統計量

describe() 函數是 Pandas 中最常用的查看數據分布的工具之一。它可以幫助我們了解每一列的基本統計信息,包括計數、均值、標準差、最小值、最大值以及四分位數等。通過這些信息,我們可以初步識別數據中的異常值。

import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.randint(1, 100, (4, 3)), index=["zhangsan", "lisi", "wangwu", "zhouliu"], columns=["Chinese", "Math", "English"])# 查看描述性統計量
df.describe()

輸出結果:

        Chinese    Math    English
count   4.000000  4.000000  4.000000
mean   85.750000  36.750000  25.250000
std    13.022417  26.474831  19.397165
min    74.000000  11.000000  7.000000
25%    74.750000  16.250000  9.250000
50%    85.500000  35.000000  25.500000
75%    96.500000  55.500000  41.500000
max    98.000000  66.000000  43.000000

通過 describe() 輸出的統計數據,我們可以觀察到各列的均值、標準差以及最大最小值。如果某一列的最小值或最大值顯得非常偏離其他數據點,這可能意味著該列中有異常值。

3.5.2. info():查看數據信息

info() 函數可以幫助我們快速查看 DataFrame 的結構,包括行數、列數、每列的非空值數量以及數據類型等。這對于檢查數據完整性和結構非常有用。

df.info()

輸出結果:

<class 'pandas.core.frame.DataFrame'>:數據結構為DataFrame
Index: 4 entries, zhangsan to zhouliu:行索引
Data columns (total 3 columns):      :列索引#   Column   Non-Null Count  Dtype  :列的信息
---  ------   --------------  -----0   Chinese  4 non-null      int32  :4個均為非空值1   Math     4 non-null      int322   English  4 non-null      int32
dtypes: int32(3)                     :元素的類型
memory usage: 80.0+ bytes            :內存中的存儲情況

通過 info(),我們得知所有列的數據類型均為 int32,且每列都沒有缺失值。這有助于確認數據是否完整且正確。

3.5.3. std():標準差

標準差是衡量數據分散程度的一個指標。標準差較大的列可能存在更多的異常值,因為數據點的波動幅度較大。我們可以通過 std() 函數來計算每列數據的標準差,并作為識別異常值的一個輔助指標。

df.std()

輸出結果:

Chinese     13.022417
Math        26.474831
English     19.397165
dtype: float64

如果某一列的標準差非常大,且數據的分布范圍較廣,則可能存在一些離群點或異常值。

3.5.4. drop():刪除特定索引

drop() 函數可以幫助我們刪除 DataFrame 中的特定行或列。如果在數據中發現了明顯的異常值或錯誤數據,可以使用 drop() 來移除這些數據。

df1 = df.copy()
df1.drop("zhangsan")  # 刪除行
df1.drop(index="zhangsan")  # 刪除行df1.drop("Chinese", axis=1)  # 刪除列
df1.drop(columns=["Chinese", "Math"], inplace=True)  # 刪除多列并覆蓋原數據

在數據清理過程中,刪除異常值或者錯誤數據是常見的操作,drop() 函數提供了簡單且靈活的方式來刪除不需要的數據。

3.5.5. unique():唯一值去重

unique() 函數可以幫助我們檢查數據中是否有重復值,對于檢測異常值非常有幫助。它返回一個包含唯一值的數組。

df["Chinese"].unique()  # 獲取“Chinese”列中的唯一值

如果某列中有重復值,unique() 可以幫助我們識別并處理這些重復數據。

3.5.6. query():按條件查詢

query() 函數可以通過條件表達式來過濾數據,這對于識別某一特定范圍之外的異常值非常有用。

df.query('Math > 60')  # 查詢 Math 列大于 60 的數據
df.query('Math > 60 and English > 60')  # 多條件查詢
df.query('Math in [10, 20, 30]')  # 查詢 Math 列為指定值的數據

query() 函數可以結合邏輯運算符(如 andor)以及比較符號(如 >, <, ==)對數據進行靈活的過濾。

3.5.7. sort_values():根據值排序

sort_values() 函數可以根據某列的值對數據進行排序,幫助我們識別最大或最小值,從而找到異常值。

df.sort_values("Chinese")  # 按照“Chinese”列升序排序
df.sort_values("Chinese", ascending=False)  # 降序排序

通過排序,我們可以快速發現某列的極端值,進而識別可能的異常值。

3.5.8. sort_index():根據索引排序

有時我們需要根據行索引來排序數據,sort_index() 函數提供了這一功能。盡管它與異常值過濾關系不大,但在數據整理過程中,它依然非常實用。

df.sort_index()  # 根據索引排序
3.5.9 案例

(練習)新建一個形狀為10000*3的標準正態分布的DataFrame(np.random.randn),去除掉所有滿足以下情況的行:其中任一元素絕對值大于3倍標準差

df = pd.DataFrame(np.random.randn(10000, 3))
cond = df.abs() > df.std()*3 #通過矩陣的運算求得各元素是否滿足條件
cond1 = cond.any(axis=1) #判斷每一行是否包含一個False(即不滿足條件的行)
df[~cond1] #將不滿足條件的行過濾

3.5 Pandas的數學處理

3.5.1 抽樣
df.take([1, 0, 3, 2])# 行排序
df.take([2, 1, 0], axis=1) #列排序
np.random.permutation([0, 1, 2]) #隨機排序
# 無放回抽樣
df.take(np.random.permutation([0, 1, 2]))
# 有放回抽樣
df.take(np.random.randint(0, 4, size=5))
3.5.2 常用的數學函數

Pandas 提供了許多常用的數學函數,幫助我們對數據進行統計和分析

1 統計指標函數
  • max():計算每一列或每一行的最大值。

    df.max()  # 默認求每一列的最大值
    df.max(axis=1)  # 求每一行的最大值
    
  • count():計算每一列或每一行的非空元素個數。

    df.count()  # 默認求每一列的非空元素個數
    df.count(axis=1)  # 求每一行的非空元素個數
    
  • median():計算每一列的中位數。

    df.median()  # 默認求每一列的中位數
    
  • mean():計算每一列的平均值。

    df.mean()  # 默認求每一列的平均值
    
  • var():計算每一列的方差。

    df.var()  # 默認求每一列的方差
    
  • std():計算每一列的標準差。

    df.std()  # 默認求每一列的標準差
    
2 相關性與協方差
  • cov():計算每一列之間的協方差。

    df.cov()  # 默認求每一列的協方差
    
  • corr():計算每一列之間的相關系數。

    df.corr()  # 默認求每一列的相關系數
    
3 其他常用函數
  • value_counts():統計某一列或 Series 中每個元素的出現次數。

    df[0].value_counts()  # 統計第0列元素的出現次數
    
  • cumsum():計算每一列的累加和。

    df.cumsum()  # 每列的累加和
    
  • cumprod():計算每一列的累乘積。

    df.cumprod()  # 每列的累乘積
    
4. 組合使用示例

假設我們有一個 DataFrame,我們可以結合上述數學函數和抽樣方法進行更復雜的操作。

例如,隨機抽樣 3 行數據并計算它們的平均值和標準差:

import pandas as pd
import numpy as np# 示例 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [6, 7, 8, 9, 10],'C': [11, 12, 13, 14, 15]}
df = pd.DataFrame(data)# 隨機抽樣
sampled_df = df.take(np.random.permutation(df.index)[:3])# 計算平均值和標準差
mean_values = sampled_df.mean()
std_values = sampled_df.std()print("抽樣數據:\n", sampled_df)
print("\n平均值:\n", mean_values)
print("\n標準差:\n", std_values)

Pandans數據聚合

數據聚合通常是在數據處理的最后一步,它的目的是將每個分組的數據轉換成一個單一的數值,以便做出總結或進一步分析。數據分類處理(GroupBy)是數據分析中非常重要的一步,它主要分為三個步驟:

3.6.1. 分組 (Group)
  • 在分組的步驟中,數據會根據某一列或多列的值進行分組。比如,你可以根據“顏色”列將數據分為不同的顏色組,或者根據日期將數據分為不同的時間段組。
  • 這一步使用 groupby() 函數來完成。groupby() 函數可以將數據框按某些列的值分組,創建一個 GroupBy 對象。
grouped = ddd.groupby('color')
# 可以通過groups屬性查看元素的值
grouped.groups #里面包含聚合元素的索引
3.6.2. 用函數處理 (Apply Functions)
  • 一旦數據被分組,你可以對每一組數據應用特定的函數進行處理。常見的操作有求和、平均數、最大值、最小值等。
  • 你可以對分組后的數據應用標準的聚合函數(如 sum()mean()count() 等),或者你可以定義自己的自定義函數來處理每個分組。
grouped_sum = grouped.sum()  # 對每個分組的數據求和
grouped_mean = grouped.mean()  # 對每個分組的數據求平均

也可以使用 apply()agg() 方法,來應用更加復雜的操作:

grouped_custom = grouped.apply(lambda x: x['score'].max() - x['score'].min())
3.6.3. 合并 (Combine)
  • 聚合操作完成后,最終的結果是各組的數據經過處理后得到的一個單一數值。groupby() 返回的是一個 GroupBy 對象,你通常需要將不同組的結果合并成一個新的數據框或系列。
  • 比如,使用 sum()mean() 后,會返回每個分組的匯總結果,合并成一個新的數據框或系列。
final_result = grouped['score'].sum()  # 對每個分組的 "score" 列求和并合并結果
groupby() 的常見方法:
  • 聚合:
    • sum():求和
    • mean()`:均值
    • count():計數
    • min():最小值
    • max():最大值
    • std():標準差
    • agg():自定義聚合函數
  • 過濾:對分組后的數據進行過濾(filter()
  • 轉換:對分組后的數據進行轉換(transform()
  • 應用:應用自定義函數(apply()
3.6.4. 案例
ddd=pd.DataFrame(
data={"item":["蘿卜","白菜","辣椒","冬瓜","蘿卜","白菜","辣椒","冬瓜"],"color":["白","青","紅","白","青","紅","白","青"],"weight":[10,20,10,10,30,40,50,60],"price":[0.99,1.99,2.99, 3.99,4,5,6,7]
})
# 對ddd進行聚合操作,求出顏色為白色的價格總和
ddd.groupby("color").sum(numeric_only=False).loc['白']
# 對ddd進行聚合操作,分別求出蘿卜的所有重量以及平均價格
x1 = ddd.groupby("item")[["weight"]].sum()
x2 = ddd.groupby("item")[["price"]].mean()
x1.merge(x2, left_index=True, right_index=True).loc[['蘿卜']]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67601.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【PyTorch】4.張量拼接操作

個人主頁&#xff1a;Icomi 在深度學習蓬勃發展的當下&#xff0c;PyTorch 是不可或缺的工具。它作為強大的深度學習框架&#xff0c;為構建和訓練神經網絡提供了高效且靈活的平臺。神經網絡作為人工智能的核心技術&#xff0c;能夠處理復雜的數據模式。通過 PyTorch&#xff0…

jstat命令詳解

jstat 用于監視虛擬機運行時狀態信息的命令&#xff0c;它可以顯示出虛擬機進程中的類裝載、內存、垃圾收集、JIT 編譯等運行數據。 命令的使用格式如下。 jstat [option] LVMID [interval] [count]各個參數詳解&#xff1a; option&#xff1a;操作參數LVMID&#xff1a;本…

App.Current.Services.GetService<UserView>()無限循環

代碼無線循環 public partial class UserView : UserControl{public UserView(){InitializeComponent();InitData();}private void InitData(){DataContext App.Current.Services.GetService<UserView>();}} } DataContext App.Current.Services.GetService<User…

(動態規劃路徑基礎 最小路徑和)leetcode 64

視頻教程 1.初始化dp數組&#xff0c;初始化邊界 2、從[1行到n-1行][1列到m-1列]依次賦值 #include<vector> #include<algorithm> #include <iostream>using namespace std; int main() {vector<vector<int>> grid { {1,3,1},{1,5,1},{4,2,1}…

松靈機器人 scout ros2 驅動 安裝

必須使用 ubuntu22 必須使用 鏈接的humble版本 #打開can 口 sudo modprobe gs_usbsudo ip link set can0 up type can bitrate 500000sudo ip link set can0 up type can bitrate 500000sudo apt install can-utilscandump can0mkdir -p ~/ros2_ws/srccd ~/ros2_ws/src git cl…

pytorch基于GloVe實現的詞嵌入

PyTorch 實現 GloVe&#xff08;Global Vectors for Word Representation&#xff09; 的完整代碼&#xff0c;使用 中文語料 進行訓練&#xff0c;包括 共現矩陣構建、模型定義、訓練和測試。 1. GloVe 介紹 基于詞的共現信息&#xff08;不像 Word2Vec 使用滑動窗口預測&…

C++ 堆棧分配的區別

這兩種聲明方式有什么區別 1.使用 new 關鍵字動態分配內存 動態分配&#xff1a;使用 new 關鍵字會在堆&#xff08;heap&#xff09;上分配內存&#xff0c;并返回一個指向該內存位置的指針。生命周期&#xff1a;對象的生命周期不會隨著聲明它的作用域結束而結束&#xff0…

深入解析 Linux 內核中的頁面錯誤處理機制

在現代操作系統中,頁面錯誤(Page Fault)是內存管理的重要組成部分。當程序試圖訪問未映射到物理內存的虛擬內存地址時,CPU 會觸發頁面錯誤異常。Linux 內核通過一系列復雜的機制來處理這些異常,確保系統的穩定性和性能。本文將深入解析 Linux 內核中處理頁面錯誤的核心代碼…

MATLAB-Simulink并行仿真示例

一、概述 在進行simulink仿真的過程中常常遇到CPU利用率較低&#xff0c;仿真緩慢的情況&#xff0c;可以借助并行仿真改善這些問題&#xff0c;其核心思想是將參數掃描、蒙特卡洛分析或多工況驗證等任務拆分成多個子任務&#xff0c;利用多核CPU或計算集群的并行計算能力&…

Workbench 中的熱源仿真

探索使用自定義工具對移動熱源進行建模及其在不同行業中的應用。 了解熱源動力學 對移動熱源進行建模為各種工業過程和應用提供了有價值的見解。激光加熱和材料加工使用許多激光束來加熱、焊接或切割材料。盡管在某些情況下&#xff0c;熱源 &#xff08;q&#xff09; 不是通…

I2C基礎知識

引言 這里祝大家新年快樂&#xff01;前面我們介紹了串口通訊協議&#xff0c;現在我們繼續來介紹另一種常見的簡單的串行通訊方式——I2C通訊協議。 一、什么是I2C I2C 通訊協議&#xff08;Inter-Integrated Circuit&#xff09;是由Phiilps公司在上個世紀80年代開發的&#…

深度學習 DAY3:NLP發展史

NLP發展史 NLP發展脈絡簡要梳理如下&#xff1a; (遠古模型&#xff0c;上圖沒有但也可以算NLP&#xff09; 1940 - BOW&#xff08;無序統計模型&#xff09; 1950 - n-gram&#xff08;基于詞序的模型&#xff09; (近代模型&#xff09; 2001 - Neural language models&am…

CSS 背景與邊框:從基礎到高級應用

CSS 背景與邊框&#xff1a;從基礎到高級應用 1. CSS 背景樣式1.1 背景顏色示例代碼&#xff1a;設置背景顏色 1.2 背景圖像示例代碼&#xff1a;設置背景圖像 1.3 控制背景平鋪行為示例代碼&#xff1a;控制背景平鋪 1.4 調整背景圖像大小示例代碼&#xff1a;調整背景圖像大小…

HarmonyOS簡介:應用開發的機遇、挑戰和趨勢

問題 更多的智能設備并沒有帶來更好的全場景體驗 連接步驟復雜數據難以互通生態無法共享能力難以協同 主要挑戰 針對不同設備上的不同操作系統&#xff0c;重復開發&#xff0c;維護多套版本 多種語言棧&#xff0c;對人員技能要求高 多種開發框架&#xff0c;不同的編程…

【Linux】列出所有連接的 WiFi 網絡的密碼

【Linux】列出所有連接的 WiFi 網絡的密碼 終端輸入 sudo grep psk /etc/NetworkManager/system-connections/*會列出所有連接過 Wifi 的信息&#xff0c;格式類似 /etc/NetworkManager/system-connections/AAAAA.nmconnection:pskBBBBBAAAAA 是 SSID&#xff0c;BBBBB 是對…

如何使用tushare pro獲取股票數據——附爬蟲代碼以及tushare積分獲取方式

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、pandas是什么&#xff1f;二、使用步驟 1.引入庫2.讀入數據 總結 一、Tushare 介紹 Tushare 是一個提供中國股市數據的API接口服務&#xff0c;它允許用戶…

觀察者模式和訂閱發布模式的關系

有人把觀察者模式等同于發布訂閱模式&#xff0c;也有人認為這兩種模式存在差異&#xff0c;本質上就是調度的方法不同。 發布訂閱模式: 觀察者模式: 相比較&#xff0c;發布訂閱將發布者和觀察者之間解耦。&#xff08;發布訂閱有調度中心處理&#xff09;

linux 環境安裝 dlib 的 gpu 版本

默認使用 pip 安裝的 dlib 是不使用 gpu 的 在國內社區用百度查如何安裝 gpu 版本的 dlib 感覺信息都不太對&#xff0c;都是說要源碼編譯還有點復雜 還需要自己安裝 cuda 相關的包啥的&#xff0c;看著就頭大 于是想到這個因該 conda 自己就支持了吧&#xff0c;然后查了一下…

【HarmonyOS之旅】基于ArkTS開發(三) -> 兼容JS的類Web開發(二)

目錄 1 -> HML語法 1.1 -> 頁面結構 1.2 -> 數據綁定 1.3 -> 普通事件綁定 1.4 -> 冒泡事件綁定5 1.5 -> 捕獲事件綁定5 1.6 -> 列表渲染 1.7 -> 條件渲染 1.8 -> 邏輯控制塊 1.9 -> 模板引用 2 -> CSS語法 2.1 -> 尺寸單位 …

三路排序算法

三路排序算法 引言 排序算法是計算機科學中基礎且重要的算法之一。在數據分析和處理中&#xff0c;排序算法的效率直接影響著程序的執行速度和系統的穩定性。本文將深入探討三路排序算法&#xff0c;包括其原理、實現和應用場景。 一、三路排序算法的原理 三路排序算法是一…