pandas dataframe統(tǒng)計(jì)填充空值方式
1.判斷dataframe是否有空值
def t2(): df = pd.DataFrame({ 'name': ['lili', 'lucy','pegga','alin',np.nan], 'age': [18, 16, np.nan, 23, np.nan], 'salary': [np.nan, 300, np.nan, 1000, 800] }) df_contains_nan = df.isnull() print(df_contains_nan) df_contains_nan_2 = df.isna() print(df_contains_nan_2)
上面的代碼將輸出
name age salary
0 False False True
1 False False False
2 False True True
3 False False False
4 True True False
name age salary
0 False False True
1 False False False
2 False True True
3 False False False
4 True True False
isnull,isna方法都是判斷df中的元素是否為空,然后輸出True/False。
要判斷df中是否有空元素,只需要稍加改變
def t3(): df = pd.DataFrame({ 'name': ['lili', 'lucy','pegga','alin',np.nan], 'age': [18, 16, np.nan, 23, np.nan], 'salary': [np.nan, 300, np.nan, 1000, 800] }) contains_nan = df.isnull().values.any() print(contains_nan)
any方法只要ndarray中有任意一個(gè)元素為T(mén)rue就返回True。
def any(self, axis=None, out=None, keepdims=False): # real signature unknown; restored from __doc__ """ a.any(axis=None, out=None, keepdims=False) Returns True if any of the elements of `a` evaluate to True. Refer to `numpy.any` for full documentation. See Also -------- numpy.any : equivalent function """ pass
2.統(tǒng)計(jì)空值個(gè)數(shù)
def t4(): df = pd.DataFrame({ 'name': ['lili', 'lucy','pegga','alin',np.nan], 'age': [18, 16, np.nan, 23, np.nan], 'salary': [np.nan, 300, np.nan, 1000, 800] }) # 每一列有多少個(gè)nan nan_column = df.isnull().values.astype(int).sum(axis=0) # 各列的nan個(gè)數(shù) nan_column_name = df.isnull().sum() print(nan_column) print('*'*10) print(nan_column_name) print('*'*10) # nan的總個(gè)數(shù) nan_all = df.isnull().sum().sum() print(nan_all)
[1 2 2]
**********
name 1
age 2
salary 2
dtype: int64
**********
5
上面的代碼,展示了統(tǒng)計(jì)每行/列空值的個(gè)數(shù),以及所有空值的個(gè)數(shù)。
3.按列填充空值
def t5(): df = pd.DataFrame({ 'name': ['lili', 'lucy','pegga','alin',np.nan], 'age': [18, 16, np.nan, 23, np.nan], 'salary': [np.nan, 300, np.nan, 1000, 800] }) print(df) df.name = df.name.fillna('unknown') df.age = df.age.fillna(df.age.mean()) df.salary = df.salary.fillna(df.salary.max()) print(df)
name age salary
0 lili 18.0 NaN
1 lucy 16.0 300.0
2 pegga NaN NaN
3 alin 23.0 1000.0
4 NaN NaN 800.0
name age salary
0 lili 18.0 1000.0
1 lucy 16.0 300.0
2 pegga 19.0 1000.0
3 alin 23.0 1000.0
4 unknown 19.0 800.0
上面的代碼,分別對(duì)name, age, salary列按固定值,當(dāng)前列平均值,當(dāng)前列最大值填充。
fillna函數(shù)有inplace參數(shù),下面代碼的效果與之前填充一致。
def t52(): df = pd.DataFrame({ 'name': ['lili', 'lucy','pegga','alin',np.nan], 'age': [18, 16, np.nan, 23, np.nan], 'salary': [np.nan, 300, np.nan, 1000, 800] }) print(df) df.name.fillna('unknown', inplace=True) df.age.fillna(df.age.mean(), inplace=True) df.salary.fillna(df.salary.max(), inplace=True) print(df)
4.按分組平均值填充
def t6(): df = pd.DataFrame({ 'level': ['A','A','A','A','B','B','B','B','C','C','C'], 'score': [2,1,3,np.nan,4,6,5,np.nan,7,9,np.nan], }) fun = lambda x: x.fillna(df.groupby('level').score.mean()[x.level]) df = df.apply(lambda x: fun(x), axis=1) # 以下一行代碼也可以實(shí)現(xiàn)相同功能 #df = df.apply(lambda x: x.fillna(df.groupby('level').score.mean()[x.level]), axis=1) print(df)
上面的代碼,將score按level分組的平均值填充。
fun傳入一行數(shù)據(jù),然后通過(guò)分組值來(lái)獲取當(dāng)前分組的平均值,最后利用fillna來(lái)填充這個(gè)平均值即可。
代碼輸出如下:
level score
0 A 2.0
1 A 1.0
2 A 3.0
3 A 2.0
4 B 4.0
5 B 6.0
6 B 5.0
7 B 5.0
8 C 7.0
9 C 9.0
10 C 8.0
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Flask框架 CSRF 保護(hù)實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Flask框架 CSRF 保護(hù)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Flask-WTF針對(duì)CSRF攻擊的防護(hù)相關(guān)操作技巧,需要的朋友可以參考下2019-10-10python打包exe開(kāi)機(jī)自動(dòng)啟動(dòng)的實(shí)例(windows)
今天小編就為大家分享一篇python打包exe開(kāi)機(jī)自動(dòng)啟動(dòng)的實(shí)例(windows),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Python Tornado 實(shí)現(xiàn)SSE服務(wù)端主動(dòng)推送方案
SSE是Server-Sent Events 的簡(jiǎn)稱(chēng),是一種服務(wù)器端到客戶端(瀏覽器)的單項(xiàng)消息推送,本文主要探索兩個(gè)方面的實(shí)踐一個(gè)是客戶端發(fā)送請(qǐng)求,服務(wù)端的返回是分多次進(jìn)行傳輸?shù)?直到傳輸完成,這種情況下請(qǐng)求結(jié)束后,考慮關(guān)閉SSE,所以這種連接可以認(rèn)為是暫時(shí)的,感興趣的朋友一起看看吧2024-01-01在Django中管理Users和Permissions以及Groups的方法
這篇文章主要介紹了在Django中管理Users和Permissions以及Groups的方法,Django是最具人氣的Python web開(kāi)發(fā)框架,需要的朋友可以參考下2015-07-07在pandas中遍歷DataFrame行的實(shí)現(xiàn)方法
這篇文章主要介紹了在pandas中遍歷DataFrame行的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10python使用openpyxl庫(kù)讀寫(xiě)Excel表格的方法(增刪改查操作)
這篇文章主要介紹了python使用openpyxl庫(kù)讀寫(xiě)Excel表格的方法(增刪改查操作),本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05