1. 程式人生 > 程式設計 >詳解Pandas 處理缺失值指令大全

詳解Pandas 處理缺失值指令大全

前言

運用pandas 庫對所得到的資料進行資料清洗,複習一下相關的知識。

1 資料清洗

1.1 處理缺失資料

對於數值型資料,分為缺失值(NAN)和非缺失值,對於缺失值的檢測,可以通過Python中pandas庫的Series類物件的isnull方法進行檢測。

import pandas as pd
import numpy as np
string_data = pd.Series(['Benzema','Messi',np.nan,'Ronaldo'])
string_data.isnull()

對於缺失值,除了np.nan來表示,還可以用None來表示缺失值

string_data = None

1.2 濾除掉缺失資料

1.2.1 對於Series

使用dropna方法將NAN的資料過濾掉。

from numpy import nan as NA
import pandas as pd
data = pd.Series([1,NA,4.5,5])
data.dropna()

另一種方法是使用布林值索引對NAN資料進行過濾:

data[data.notnull()]

1.2.2 對於DataFrame

dropna()方法對於DataFrame的資料來說,會將含有NAN資料的行全部扔掉。

data = pd.DataFrame([[1.,6.5,3.],[1.,NA],[NA,3.]])
data
data.dropna()

如果只想刪除掉那些行中全部為NAN資料的DataFrame,通過設定dropna()方法中的引數how即可。

data.dropna(how = 'all')

如果操作物件變為列,程式碼如下:

data[4] = NA
data
data.dropna(axis=1,how = 'all')

如果想留下其中的一部分資料,則可以設定thresh引數:

df = pd.DataFrame(np.random.randn(7,3))
df.iloc[:4,1] = NA
df.iloc[:2,2] = NA
df
df.dropna(thresh = 2)

thresh = n,引數n相當於保留至少含有n個非NA的行

1.3 填充缺失資料

fillna(n),n替換掉NA

df = pd.DataFrame(np.random.randn(7,3))
df.fillna(0)

如果填充格式是字典,fillna({0:n1,1:n2}),將列0的NA填充為 n1,將列1的NA填充為 n2。

df.fillna({{1 : 0.2,2 : 0.3}})

直接填充df的NA值,直接改變df,不需要命名新的變數。

df.fillna(0,inplace = True)

2 資料轉換

2.1 移除重複資料

data = pd.DataFrame({'k1': ['one','two'] * 3 + ['two'],'k2': [1,1,2,3,4,4]})
data.duplicated()

返回的是每一行的重複結果,不重複是False,重複是True。

如果要去除重複的行,程式碼如下:

data.drop_duplicates()

如果操作物件為列,在duplicated方法中指定引數即可。

data['k3'] = range(7)
data.duplicated(['k1'])

返回的是 k1 列中重複的元素。

對於drop_duplicates()方法來說,去除掉的是重複資料的後者。比如說序號為0,1的資料重複,方法刪除掉index = 1的行。如果想要刪除前者,只需要指定引數 last即可:

data.drop_duplicates(['k1'],keep = 'last')

2.2 與對映相結合

map函式的使用方法

list(map(lambda x : 2 * x,range(10)))

2.3 替換

使用的是replace 方法,replace有兩個引數,前者是被替換的數,後者是替換的數,引數格式可以是列表,也可以是字典

data = pd.Series([1.,-999.,2.,-1000.,3.])
data.replace(-999.0,np.nan) #替換單個值
data.replace([-999.0,-1000.0],np.nan) #用一個值替換多個值
data.replace([-999.0,[np.nan,0]) # 用不同值替換不同值
data.replace({-999.0 : 0,-1000.0 : np.nan}) # 格式為字典

2.4 建立資料的修改版

rename方法可以建立資料的修改版,而不必在原資料上進行修改。

data.rename(index=str.title,columns=str.upper)

還可以使用字典的格式,對index,columns 進行改變。

data.rename(index = {'OHIO': 'INDIANA'},columns = {'three': 'peekaboo'})

這樣的重新命名並不對原資料進行修改,如果想要直接改變data,如上,引數inplace = True即可。

data.rename(index = {'OHIO': 'INDIANA'},columns = {'three': 'peekaboo'},inplace = True)
data

這樣就改變了data。

2.5 計算指標\啞變數

用於機器學習中,對定類資料的轉化,用於將df中的object物件轉化為One-hot編碼,消除了數字間的比較大小問題。

df = pd.DataFrame({'key': ['b','b','a','c','b'],'data1': range(6)})
pd.get_dummies(df['key']) # 分解了key 列,分開了三個屬性

如果想在分開的屬性前面加上字首的話,設定prefix 引數即可實現該功能,可以將其與原始資料合併在一起。

dummies = pd.get_dummies(df['key'],prefix = 'key')
df_with_dummies = df['data1'].join(dummies)
df_with_dummies

到此這篇關於詳解Pandas 處理缺失值指令大全 的文章就介紹到這了,更多相關Pandas 處理缺失值內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!