Pandas中DataFrame中的nan值處理
1. 方法簡介
1.1 DataFrame.dropna()
DataFrame.dropna()方法的作用:是刪除含用空值或缺失值得行或列。
語法為:dropna(axis=0,how=‘any’,thresh=None,subset=None,inplace=False)
參數(shù):
- axis:確定過濾的行或列,取值可以為
(1) 0或index:刪除包含缺失值的行,默認為0。
(2) 1或columns:刪除包含缺失值的列。 - how:確定過濾的標準,取值可以為:
(1)any:默認值,如果存在NaN值,就刪除該行或該列。//有一個就刪除行或列
(2)all:如果所有值都是NaN值,就刪除該行或該列。 //全部都是才刪除行或列 - thresh:表示有效數(shù)據(jù)量的最小要求,比如thresh=3,要求該行或該列至少有三個不是NaN值時將其保留。
- subset:表示在特定的字集中尋找NaN值
- inplace:表示是否在原數(shù)據(jù)上操作,如果設為True,則表示直接修改原數(shù)據(jù);如果設為False,則表示修改原數(shù)據(jù)的副本,返回新數(shù)據(jù)
1.2 .DataFrame.fillna()
語法為:fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
參數(shù):
- value:用于填充的空值的值。
- method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None。定義了填充空值的方法, pad / ffill表示用前面行/列的值,填充當前行/列的空值, backfill / bfill表示用后面行/列的值,填充當前行/列的空值。
- axis:軸。0或’index’,表示按行刪除;1或’columns’,表示按列刪除。
- inplace:是否原地替換。布爾值,默認為False。如果為True,則在原DataFrame上進行操作,返回值為None。
- limit:int, default None。如果method被指定,對于連續(xù)的空值,這段連續(xù)區(qū)域,最多填充前 limit 個空值(如果存在多段連續(xù)區(qū)域,每段最多填充前 limit 個空值)。如果method未被指定, 在該axis下,最多填充前 limit 個空值(不論空值連續(xù)區(qū)間是否間斷)
- downcast:dict, default is None,字典中的項為,為類型向下轉換規(guī)則。或者為字符串“infer”,此時會在合適的等價類型之間進行向下轉換,比如float64 to int64 if possible。
2. 案例
import pandas as pd import numpy as np df = pd.DataFrame(np.arange(32).reshape(8, 4), columns=list("abcd")) df.loc[1, 'a'] = 2 df.loc[1, 'c'] = 2.0 df.loc[6, 'c'] = np.nan df.loc[3, 'c'] = 10 df.loc[3, ['c', 'd']] = np.nan df["year"] = '2023' df["date"] = ['08-25','08-26','08-27','08-28','08-29','08-30','08-31','09-01'] # 合并數(shù)據(jù) df["ydate"] =df["year"].map(str) +"-"+ df["date"].map(str) df["高溫"] = ['15°', '16°', '20°', '19°', '20°', '22°', '24°', '23°'] df["低溫"] = ['10°', '11°', '18°', '17°', '10°', '18°', '20°', '17°'] df["空氣質(zhì)量"] = ['優(yōu)', '良', '優(yōu)', '優(yōu)', '差', '良', '優(yōu)', np.nan] print(df)
a b c d year date ydate 高溫 低溫 空氣質(zhì)量
0 0 1 2.0 3.0 2023 08-25 2023-08-25 15° 10° 優(yōu)
1 2 5 2.0 7.0 2023 08-26 2023-08-26 16° 11° 良
2 8 9 10.0 11.0 2023 08-27 2023-08-27 20° 18° 優(yōu)
3 12 13 NaN NaN 2023 08-28 2023-08-28 19° 17° 優(yōu)
4 16 17 18.0 19.0 2023 08-29 2023-08-29 20° 10° 差
5 20 21 22.0 23.0 2023 08-30 2023-08-30 22° 18° 良
6 24 25 NaN 27.0 2023 08-31 2023-08-31 24° 20° 優(yōu)
7 28 29 30.0 31.0 2023 09-01 2023-09-01 23° 17° NaN
2.1 刪除全部為NaN的行
df1 = df.copy() df1.loc[8, :] = np.nan df1
a b c d year date ydate 高溫 低溫 空氣質(zhì)量
0 0.0 1.0 2.0 3.0 2023 08-25 2023-08-25 15° 10° 優(yōu)
1 2.0 5.0 2.0 7.0 2023 08-26 2023-08-26 16° 11° 良
2 8.0 9.0 10.0 11.0 2023 08-27 2023-08-27 20° 18° 優(yōu)
3 12.0 13.0 NaN NaN 2023 08-28 2023-08-28 19° 17° 優(yōu)
4 16.0 17.0 18.0 19.0 2023 08-29 2023-08-29 20° 10° 差
5 20.0 21.0 22.0 23.0 2023 08-30 2023-08-30 22° 18° 良
6 24.0 25.0 NaN 27.0 2023 08-31 2023-08-31 24° 20° 優(yōu)
7 28.0 29.0 30.0 31.0 2023 09-01 2023-09-01 23° 17° NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
df1 = df.dropna(axis=0, how='all') df1
a | b | c | d | year | date | ydate | 高溫 | 低溫 | 空氣質(zhì)量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 1.0 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 優(yōu) |
1 | 2.0 | 5.0 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8.0 | 9.0 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 優(yōu) |
3 | 12.0 | 13.0 | NaN | NaN | 2023 | 08-28 | 2023-08-28 | 19° | 17° | 優(yōu) |
4 | 16.0 | 17.0 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20.0 | 21.0 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
6 | 24.0 | 25.0 | NaN | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 優(yōu) |
7 | 28.0 | 29.0 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
2.2 刪除包含NaN的行
df2 = df.dropna(axis=0, how='any') df2
a | b | c | d | year | date | ydate | 高溫 | 低溫 | 空氣質(zhì)量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 1.0 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 優(yōu) |
1 | 2.0 | 5.0 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8.0 | 9.0 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 優(yōu) |
4 | 16.0 | 17.0 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20.0 | 21.0 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
2.3 刪除包含NaN的列
df3 = df.dropna(axis=1, how='any') df3
a | b | year | date | ydate | 高溫 | 低溫 | |
---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2023 | 08-25 | 2023-08-25 | 15° | 10° |
1 | 2 | 5 | 2023 | 08-26 | 2023-08-26 | 16° | 11° |
2 | 8 | 9 | 2023 | 08-27 | 2023-08-27 | 20° | 18° |
3 | 12 | 13 | 2023 | 08-28 | 2023-08-28 | 19° | 17° |
4 | 16 | 17 | 2023 | 08-29 | 2023-08-29 | 20° | 10° |
5 | 20 | 21 | 2023 | 08-30 | 2023-08-30 | 22° | 18° |
6 | 24 | 25 | 2023 | 08-31 | 2023-08-31 | 24° | 20° |
7 | 28 | 29 | 2023 | 09-01 | 2023-09-01 | 23° | 17° |
2.4 刪除全部為NaN的列
df4 = df.copy() df4["unknow"] = np.nan df4
a | b | c | d | year | date | ydate | 高溫 | 低溫 | 空氣質(zhì)量 | unknow | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 優(yōu) | NaN |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 | NaN |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 優(yōu) | NaN |
3 | 12 | 13 | NaN | NaN | 2023 | 08-28 | 2023-08-28 | 19° | 17° | 優(yōu) | NaN |
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 | NaN |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 | NaN |
6 | 24 | 25 | NaN | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 優(yōu) | NaN |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN | NaN |
df4 = df4.dropna(axis=1, how='all') df4
a | b | c | d | year | date | ydate | 高溫 | 低溫 | 空氣質(zhì)量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 優(yōu) |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 優(yōu) |
3 | 12 | 13 | NaN | NaN | 2023 | 08-28 | 2023-08-28 | 19° | 17° | 優(yōu) |
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
6 | 24 | 25 | NaN | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 優(yōu) |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
2.5 刪除指定列是NaN的行
刪除指定某一列有nan,這樣即可定位到所在行的index,然后對該index進行drop操作即可
df[np.isnan(df['c'])].index #定位某一列是否有nan
輸出:
Index([3, 6], dtype='int64')
# 直接drop對應indx即可刪除該行 df5 = df.drop(df[np.isnan(df['c'])].index) df5
a | b | c | d | year | date | ydate | 高溫 | 低溫 | 空氣質(zhì)量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 優(yōu) |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 優(yōu) |
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
2.6 刪除指定的兩列都是空的行
df6 = df.dropna(axis=0, how='all', subset=['c', 'd']) df6
a | b | c | d | year | date | ydate | 高溫 | 低溫 | 空氣質(zhì)量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 優(yōu) |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 優(yōu) |
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
6 | 24 | 25 | NaN | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 優(yōu) |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
2.7 篩選出NaN的數(shù)據(jù)
df_nan = df[df['d'].isna()] df_nan
a | b | c | d | year | date | ydate | 高溫 | 低溫 | 空氣質(zhì)量 | |
---|---|---|---|---|---|---|---|---|---|---|
3 | 12 | 13 | NaN | NaN | 2023 | 08-28 | 2023-08-28 | 19° | 17° | 優(yōu) |
2.8 篩選出非NaN的數(shù)據(jù)
df_notnan = df[~df['d'].isna()] df_notnan
a | b | c | d | year | date | ydate | 高溫 | 低溫 | 空氣質(zhì)量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 優(yōu) |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 優(yōu) |
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
6 | 24 | 25 | NaN | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 優(yōu) |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
2.9 替換NaN值
df9 = df.fillna('') # 將nan替換為'' df9
a | b | c | d | year | date | ydate | 高溫 | 低溫 | 空氣質(zhì)量 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2.0 | 3.0 | 2023 | 08-25 | 2023-08-25 | 15° | 10° | 優(yōu) |
1 | 2 | 5 | 2.0 | 7.0 | 2023 | 08-26 | 2023-08-26 | 16° | 11° | 良 |
2 | 8 | 9 | 10.0 | 11.0 | 2023 | 08-27 | 2023-08-27 | 20° | 18° | 優(yōu) |
3 | 12 | 13 | 2023 | 08-28 | 2023-08-28 | 19° | 17° | 優(yōu) | ||
4 | 16 | 17 | 18.0 | 19.0 | 2023 | 08-29 | 2023-08-29 | 20° | 10° | 差 |
5 | 20 | 21 | 22.0 | 23.0 | 2023 | 08-30 | 2023-08-30 | 22° | 18° | 良 |
6 | 24 | 25 | 27.0 | 2023 | 08-31 | 2023-08-31 | 24° | 20° | 優(yōu) | |
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° |
2.10 多條件篩選
nan_df = df[(df['高溫'].str.len() <= 2) | (df['空氣質(zhì)量'].isna())] nan_df
a | b | c | d | year | date | ydate | 高溫 | 低溫 | 空氣質(zhì)量 | |
---|---|---|---|---|---|---|---|---|---|---|
7 | 28 | 29 | 30.0 | 31.0 | 2023 | 09-01 | 2023-09-01 | 23° | 17° | NaN |
總結
到此這篇關于Pandas中DataFrame中的nan值處理的文章就介紹到這了,更多相關Pandas DataFrame nan值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
pycharm無法安裝第三方庫的問題及解決方法以scrapy為例(圖解)
這篇文章主要介紹了pycharm無法安裝第三方庫的解決辦法以scrapy為例,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05Python進行數(shù)據(jù)可視化Plotly與Dash的應用小結
數(shù)據(jù)可視化是數(shù)據(jù)分析中至關重要的一環(huán),它能夠幫助我們更直觀地理解數(shù)據(jù)并發(fā)現(xiàn)隱藏的模式和趨勢,本文主要介紹了Python進行數(shù)據(jù)可視化Plotly與Dash的應用小結,具有一定的參考價值,感興趣的可以了解一下2024-04-04python通過get,post方式發(fā)送http請求和接收http響應的方法
這篇文章主要介紹了python通過get,post方式發(fā)送http請求和接收http響應的方法,涉及Python使用urllib模塊與urllib2模塊實現(xiàn)get與post發(fā)送數(shù)據(jù)的相關技巧,需要的朋友可以參考下2015-05-05Python Pandas數(shù)據(jù)分析工具用法實例
這篇文章主要介紹了Python Pandas數(shù)據(jù)分析工具用法實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11