詳解Pandas 處理缺失值指令大全
前言
運(yùn)用pandas 庫(kù)對(duì)所得到的數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗,復(fù)習(xí)一下相關(guān)的知識(shí)。
1 數(shù)據(jù)清洗
1.1 處理缺失數(shù)據(jù)
對(duì)于數(shù)值型數(shù)據(jù),分為缺失值(NAN)和非缺失值,對(duì)于缺失值的檢測(cè),可以通過(guò)Python中pandas庫(kù)的Series類(lèi)對(duì)象的isnull方法進(jìn)行檢測(cè)。
import pandas as pd import numpy as np string_data = pd.Series(['Benzema', 'Messi', np.nan, 'Ronaldo']) string_data.isnull()
對(duì)于缺失值,除了np.nan來(lái)表示,還可以用None來(lái)表示缺失值
string_data = None
1.2 濾除掉缺失數(shù)據(jù)
1.2.1 對(duì)于Series
使用dropna方法將NAN的數(shù)據(jù)過(guò)濾掉。
from numpy import nan as NA import pandas as pd data = pd.Series([1,NA,4.5,NA,5]) data.dropna()
另一種方法是使用布爾值索引對(duì)NAN數(shù)據(jù)進(jìn)行過(guò)濾:
data[data.notnull()]
1.2.2 對(duì)于DataFrame
dropna()方法對(duì)于DataFrame的數(shù)據(jù)來(lái)說(shuō),會(huì)將含有NAN數(shù)據(jù)的行全部扔掉。
data = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3.]]) data data.dropna()
如果只想刪除掉那些行中全部為NAN數(shù)據(jù)的DataFrame,通過(guò)設(shè)置dropna()方法中的參數(shù)how即可。
data.dropna(how = 'all')
如果操作對(duì)象變?yōu)榱?代碼如下:
data[4] = NA data data.dropna(axis=1, how = 'all')
如果想留下其中的一部分?jǐn)?shù)據(jù),則可以設(shè)置thresh參數(shù):
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,參數(shù)n相當(dāng)于保留至少含有n個(gè)非NA的行
1.3 填充缺失數(shù)據(jù)
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 數(shù)據(jù)轉(zhuǎn)換
2.1 移除重復(fù)數(shù)據(jù)
data = pd.DataFrame({'k1': ['one', 'two'] * 3 + ['two'], 'k2': [1, 1, 2, 3, 3, 4, 4]}) data.duplicated()
返回的是每一行的重復(fù)結(jié)果,不重復(fù)是False,重復(fù)是True。
如果要去除重復(fù)的行,代碼如下:
data.drop_duplicates()
如果操作對(duì)象為列,在duplicated方法中指定參數(shù)即可。
data['k3'] = range(7) data.duplicated(['k1'])
返回的是 k1 列中重復(fù)的元素。
對(duì)于drop_duplicates()方法來(lái)說(shuō),去除掉的是重復(fù)數(shù)據(jù)的后者。比如說(shuō)序號(hào)為0,1的數(shù)據(jù)重復(fù),方法刪除掉index = 1的行。如果想要?jiǎng)h除前者,只需要指定參數(shù) last即可:
data.drop_duplicates(['k1'], keep = 'last')
2.2 與映射相結(jié)合
map函數(shù)的使用方法
list(map(lambda x : 2 * x , range(10)))
2.3 替換
使用的是replace 方法,replace有兩個(gè)參數(shù),前者是被替換的數(shù),后者是替換的數(shù),參數(shù)格式可以是列表,也可以是字典
data = pd.Series([1., -999., 2., -999., -1000., 3.]) data.replace(-999.0, np.nan) #替換單個(gè)值 data.replace([-999.0, -1000.0], np.nan) #用一個(gè)值替換多個(gè)值 data.replace([-999.0, -1000.0],[np.nan, 0]) # 用不同值替換不同值 data.replace({-999.0 : 0, -1000.0 : np.nan}) # 格式為字典
2.4 創(chuàng)建數(shù)據(jù)的修改版
rename方法可以創(chuàng)建數(shù)據(jù)的修改版,而不必在原數(shù)據(jù)上進(jìn)行修改。
data.rename(index=str.title, columns=str.upper)
還可以使用字典的格式,對(duì)index, columns 進(jìn)行改變。
data.rename(index = {'OHIO': 'INDIANA'}, columns = {'three': 'peekaboo'})
這樣的重命名并不對(duì)原數(shù)據(jù)進(jìn)行修改,如果想要直接改變data, 如上,參數(shù)inplace = True即可。
data.rename(index = {'OHIO': 'INDIANA'}, columns = {'three': 'peekaboo'}, inplace = True) data
這樣就改變了data。
2.5 計(jì)算指標(biāo)\啞變量
用于機(jī)器學(xué)習(xí)中,對(duì)定類(lèi)數(shù)據(jù)的轉(zhuǎn)化,用于將df中的object對(duì)象轉(zhuǎn)化為One-hot編碼,消除了數(shù)字間的比較大小問(wèn)題。
df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'], 'data1': range(6)}) pd.get_dummies(df['key']) # 分解了key 列,分開(kāi)了三個(gè)屬性
如果想在分開(kāi)的屬性前面加上前綴的話,設(shè)定prefix 參數(shù)即可實(shí)現(xiàn)該功能,可以將其與原始數(shù)據(jù)合并在一起。
dummies = pd.get_dummies(df['key'], prefix = 'key') df_with_dummies = df['data1'].join(dummies) df_with_dummies
到此這篇關(guān)于詳解Pandas 處理缺失值指令大全 的文章就介紹到這了,更多相關(guān)Pandas 處理缺失值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中scatter散點(diǎn)圖及顏色整理大全
python自帶的scatter函數(shù)參數(shù)中顏色和大小可以輸入列表進(jìn)行控制,即可以讓不同的點(diǎn)有不同的顏色和大小,下面這篇文章主要給大家介紹了關(guān)于Python中scatter散點(diǎn)圖及顏色整理大全的相關(guān)資料,需要的朋友可以參考下2023-05-05Pandas實(shí)現(xiàn)列(column)排序的幾種方法
Pandas是一種高效的數(shù)據(jù)處理庫(kù),在數(shù)據(jù)處理過(guò)程中,咱們經(jīng)常需要將列按照一定的要求進(jìn)行排序,本文就來(lái)介紹一下Pandas實(shí)現(xiàn)列(column)排序的幾種方法,感興趣的可以了解一下2023-11-11python pandas loc 布爾索引示例說(shuō)明
loc跟iloc的區(qū)別,首先loc是location的意思,和iloc中i的意思是指integer,所以它只接受整數(shù)作為參數(shù),詳情見(jiàn)下面2022-03-03一款開(kāi)源的Python一鍵搶票神器詳細(xì)配置
大家好,本篇文章主要講的是一款開(kāi)源的Python一鍵搶票神器,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02數(shù)據(jù)庫(kù)操作入門(mén)PyMongo?MongoDB基本用法
這篇文章主要為大家介紹了數(shù)據(jù)庫(kù)操作入門(mén)PyMongo MongoDB基本用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Python三元運(yùn)算與lambda表達(dá)式實(shí)例解析
這篇文章主要介紹了Python三元運(yùn)算與lambda表達(dá)式實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11教你用scrapy框架爬取豆瓣讀書(shū)Top250的書(shū)類(lèi)信息
這篇文章主要介紹了教你用scrapy框架爬取豆瓣讀書(shū)Top250的書(shū)類(lèi)信息,文中提供了解決思路和部分實(shí)現(xiàn)代碼,需要的朋友可以參考下2023-03-03使用Python實(shí)現(xiàn)遺傳算法的詳細(xì)步驟
遺傳算法是模仿自然界生物進(jìn)化機(jī)制發(fā)展起來(lái)的隨機(jī)全局搜索和優(yōu)化方法,它借鑒了達(dá)爾文的進(jìn)化論和孟德?tīng)柕倪z傳學(xué)說(shuō),其本質(zhì)是一種高效、并行、全局搜索的方法,本文給大家介紹了使用Python實(shí)現(xiàn)遺傳算法的詳細(xì)步驟,需要的朋友可以參考下2023-11-11