日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python?數據清洗刪除缺失值替換缺失值詳情_python

作者:正在學習中的李斌 ? 更新時間: 2022-11-18 編程語言

一、缺失數據剔除

1. python 方式

獲取所有的缺失值,返回一個 true 和 false 的表

df.isnull()

統計缺失值,按照每一列統計

df.isnull().sum()

統計缺失值 按行

df.isnull().sum(axis='columns')

查看列 是否全部缺失

df.isnull().all()

剔除 植物園 這一列 2種方式

df1 = df.drop(columns='植物園')
df1 = df.drop('植物園', axis=1)

通過數據索引的方式來剔除掉缺測數據。

列:

df1 = df.loc[:, ~(df.isnull().all())]

刪除所有 有缺失的行

df1[~(df1.isnull().any('columns'))]

這種方式看起來明顯比drop()的方式要復雜一點,那么是不是意味著我們就學drop()就行了,不用再去記住索引方式。

當然不是!drop()看起來簡單只是因為剛好只有一列需要剔除,加入我們需要剔除很多數據,那使用drop()就不足以完成任務,還是要配合索引的方式。

下面我們來看一下剔除行里的缺測值,上面的數據有很多行都有缺測值,如果在drop函數中一個一個填是很不現實的,那么我們看一下合理的解決方案應該是什么樣的。

2. DataFrame 方式

剔除列的缺失值

df.dropna(axis='columns', how='all', inplace=True)

剔除行的缺失值

df.dropna(axis='index', how='any', inplace=True)

二、缺失值補全

用前一行的數據填充

df.fillna(method='bfill')

用后一行的數據填充

df.fillna(method='bfill')

三、重復值剔除(按照行和列)

返回的是 True 和 False 的 列表

df.duplicated()

剔除重復行

df.drop_duplicates()

返回的是 True 和 False 的 列表

df.duplicated(subset=['天壇'], keep=False)

剔除 天壇 這列里面的所有重復值

df.drop_duplicates(subset=['天壇'], keep=False)

四、數值轉換

1. replace

單值轉換,將Nan 替換成 -9999

df.replace(np.nan, -9999)

多值轉化,將想替換的元素放在一個 [ ] 里就行

df.replace([np.nan, 0], -9999)

2. apply

replace可以進行簡單的數據替換,但如果想進行更為復雜的操作replace是無法完成的。
然而對DataFrame而言,apply是非常重要的數據處理方法,它可以接收各種各樣的函數(Python內置的或自定義的),處理方式很靈活,完成各種復雜的需求。他的實際作用是將函數作為一個對象,通過apply的調用對DataFrame里的數組元素應用這個函數。

只關注和設置這個規則,循環這種事情交給編程語言去處理

def aqi_level(aqi):
    if aqi>0 and aqi<=50:
        level = '優'
    elif aqi>50 and aqi<=100:
        level = '良'
    elif aqi>100 and aqi<=150:
        level = '輕度污染'
    elif aqi>150 and aqi<=200:
        level = '中度污染'
    elif aqi>200 and aqi<=300:
        level = '重度污染'
    else:
        level = '嚴重污染'
    return level

# 數據預處理一下  將所有的類型都轉為 AQI
aqi = df[df['type']=='AQI']

aqi['東四'].apply(aqi_level)

3.applymap

apply()可以實現對某一行或某一列的函數應用,如果想對DataFrame中的全部數值都使用這個函數來進行轉化我們就需要用到applymap()

#~aqi.columns.isin(['date', 'hour', 'type']) 取非這三列的所有列

aqi.loc[:, ~aqi.columns.isin(['date', 'hour', 'type'])].apply(np.mean, axis=0)
aqi.loc[:, ~aqi.columns.isin(['date', 'hour', 'type'])].applymap(aqi_level)

原文鏈接:https://blog.csdn.net/qq_35240689/article/details/126995889

欄目分類
最近更新