日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DataWhale组队-Pandas(下)缺失数据(打卡)

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataWhale组队-Pandas(下)缺失数据(打卡) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.缺失值概要

數據的缺失主要包括記錄的缺失和記錄中某個字段信息的缺失,兩者都會造成分析結果的不準確,以下從缺失值產生的原因及影響扥方面展開分析。

(1)缺失值產生的原因

1)有些信息暫時無法獲取,或者獲取信息的代價太大;

2)有些信息是被遺漏的。可能是因為輸入時認為不重要、忘記填寫或對數據理解錯誤等一些人為因素而遺漏,也可能是由于數據采集設置的故障、存儲介質的故障、傳輸媒體的故障燈非人為原因而丟失;

3)屬性值不存在。在某些情況下,缺失值并不意味著數據有錯誤。對一些對象來說某些屬性是不存在的,如一個未婚者的配偶姓名、一個兒童的固定收入等。

(2)缺失值的影響

1)數據挖掘建模將丟失大量的有用信息;

2)數據挖掘模型所表現出的不確定性更加顯著,模型中蘊涵的規律更難把握。

3)包含空值的數據會使建模過程陷入混亂,導致不可靠的輸出。

(3)缺失值的分析

使用簡單的統計分析,可以得到含有缺失值的屬性的個數,以及每個屬性的未缺失數、缺失數與缺失率等。

從總體上來說,缺失值的處理分為刪除存在缺失值的記錄、對可能值進行插補和不處理3種情況。

2.缺失值處理

import pandas as pd import numpy as np df = pd.read_csv('data/table_missing.csv') #默認輸出DataFrame的前5行 df.head()

(1)了解缺失數據

函數isna和notna方法

df['Physics'].isna().head()

df['Physics'].notna().head()

統計每列(每行)的缺失情況

#統計每列的缺失 df.isna().sum()#或者df.isnull().sum() #統計每行的缺失 df.isna(axis=0).sum()#或者df.isnull(axis=0).sum()

挑出該列缺失值的行

df[df['Physics'].isna()]

挑選出所有非缺失值的列

這里介紹了all和any的用法,all是全部值,any是至少有一個值

#all是全部非缺失值 df[df.notna().all(1)] #any至少有一個不是缺失值 df[df.notna().any(1)]

(2)三種缺失符號

(a)np.nan

它不等與任何東西,甚至不等于自己?

在用equals函數比較時,自動略過兩側全是np.nan的單元格

? ? ? ? 在numpy中的類型為浮點,由此導致數據集讀入時,即使原來是整數的列,只要有缺失值就會變為浮點型

? ? ? ??對于布爾類型的列表,如果是np.nan填充,那么它的值會自動變為True而不是False,但當修改一個布爾列表時,會改變列表類型,而不是賦值為True

? ? ? ? ?在所有的表格讀取后,無論列是存放什么類型的數據,默認的缺失值全為np.nan類型,因此整型列轉為浮點;而字符由于無法轉化為浮點,因此只能歸并為object類型('O'),原來是浮點型的則類型不變。

? ? ? ? ?(b)None

? ? ? ? ? ?None比前者稍微好些,至少它會等于自身

? ? ? ? ? ?它的布爾值為False

? ? ? ? ? ?修改布爾列表不會改變數據類型

? ? ? ? ? ?在傳入數值類型后,會自動變為np.nan

? ? ? ? ? 只有當傳入object類型是保持不動,幾乎可以認為,除非人工命名None,它基本不會自動出現在Pandas中

? ? ? ? ? ?在使用equals函數時不會被略過,因此下面的情況下返回False?

? ? ? ? (c)NaT

? ? ? ? ? ?NaT是針對時間序列的缺失值,是Pandas的內置類型,可以完全看做時序版本的np.nan,與自己不等,且使用equals是也會被跳過。

? ? ? ? (3)Nullable類型與NA符號

? ? ? ? (a)Nullable整形

? ? ? ? ? 對于該種類型而言,它與原來標記int上的符號區別在于首字母大寫:‘Int’,好處在于缺失值的類型都被替換成統一的NA符號,且不改變數據類型。

(b)Nullable布爾?

與Nullable整型一致,且數據類型不會變成浮點型

(c)string類型

為了區分開原本含糊不清的object類型,它本質上也屬于Nullable類型,因為不會含有缺失而改變類型;

與object類型的一點重要區別就在于,在調用字符方法后,string類型返回的是Nullable類型,object則會根據缺失類型和數據類型而改變。

(4)NA的特性

(a)邏輯運算

只需看該邏輯運算的結果是否依賴pd.NA的取值,如果依賴,則結果還是NA,如果不依賴,則直接計算結果,取值不明直接報錯

(b)算術運算和比較運算

當出現pd.NA**0和1**pd.NA時結果為1,其他情況為NA

(5)convert_dtypes方法

在讀取數據時,就把數據列轉為Nullable,是pandas1.0的新函數。

pd.read_csv('data/table_missing.csv').convert_dtypes().dtypes

3.缺失數據的運算與分組

(a)加號和乘號規則

使用加法時,缺失值為0;

使用乘法時,缺失值為1;

使用累計函數時,缺失值自動略過

(b)groupby方法中的缺失值

自動忽略為缺失值的組

df_g = pd.DataFrame({'one':['A','B','C','D',np.nan],'two':np.random.randn(5)}) print(df_g) df_g.groupby('one').groups

4.填充與剔除

(a)fillna方法(值填充與前后向填充,methods=ffill or bfill)

#值填充 df['Physics'].fillna('missing').head() #前向填充 df['Physics'].fillna(method='ffill').head() #后向填充 df['Physics'].fillna(method='backfill').head()

指定列填充

df_f = pd.DataFrame({'A':[1,3,np.nan],'B':[2,4,np.nan],'C':[3,5,np.nan]}) #填充全部列 df_f.fillna(df_f.mean()) #填充A,B兩列 df_f.fillna(df_f.mean()[['A','B']])

(b)dropna方法

axis參數是行或列的參數,如果axis=0,則對應是每一行,如果axis=1,則對應沒一列

how參數是可以選擇all或者是any,表示全為缺失去除或存在缺失去除

subset參數是在某一列范圍中搜索缺失值

5.插值(interpolation)

常見的數據插補方法有:

(1)線性插值

(a)與索引無關的線性插值

默認狀態下,interpolate會對缺失的值進行線性插值

s = pd.Series([1,10,15,-5,-2,np.nan,np.nan,28]) s.interpolate()

(b)與索引有關的線性插值

method中的index和time選項可以是插值線性地依賴索引,即插值為索引的線性函數

s.interpolate(method='index')

如果索引是時間,那么可以按照時間長短插值。

s_t = pd.Series([0,np.nan,10],index=[pd.Timestamp('2012-05-01'),pd.Timestamp('2012-05-07'),pd.Timestamp('2012-06-03')]) #未按照time插值(圖1) s_t.interpolate() #按照time插值(圖2) s_t.interpolate(method='time')

?

(2)高級插值方法

與線性插值相比較,例如樣條插值、多項式插值、阿基瑪插值等,可進一步學習。

ser = pd.Series(np.arange(1, 10.1, .25) ** 2 + np.random.randn(37)) missing = np.array([4, 13, 14, 15, 16, 17, 18, 20, 29]) ser[missing] = np.nan methods = ['linear', 'quadratic', 'cubic'] df = pd.DataFrame({m: ser.interpolate(method=m) for m in methods}) df.plot()

(3)interpolate的限制參數

(a)limit最多插入多少個,s.interpolate(limit=2)

(b)limit_direction表示插值方向,可選forword,backward,both,默認前向,s.interpolate(limit_direction='backward')

(c)limit_area表示插值區域,可選inside,outside,默認None,s.interpolate(limit_area='inside')

練習題:

(1)如何刪除缺失值在25%以上的列

s.drop(s.columns[s.isna().sum()/s.shape[0]>0.25],axis=1)

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的DataWhale组队-Pandas(下)缺失数据(打卡)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。