前言
最近看到一些教程關於「pandas讀取資料之後,如何處理缺失值或者如何替換指定值為另外乙個值」看了那些教程,然後進行了一會實操,發現不能滿足我的需求,於是開始探索另外的解決辦法
下面來看一下解決方案
0x01、不設定預設載入空值為nankeep_default_na=false
df = pandas.read_excel("/home/project/day320/test.xlsx", keep_default_na=false)
注釋:pandas載入excel**,空值都是預設為 nan,即原始碼中keep_default_na=true
所以當我們想要空值就是空值的話,那麼可以設定keep_default_na=false
,這時候,讀取出來的空值是空字串
可是,我的excel**之前就是存在很多 na 值的,這不能滿足我的需求,我其實是想將 na 值再還原回原來的空字串,所以請繼續看後面的方法0x02、用dropna()、fillna()處理缺失值
存在下面的使用方法:
刪除空值:
df.dropna() # 缺省會刪除所有的空值,包含所有行裡面的、所有列裡面的空值
df.dropna(how="all") # 刪除全為 na 的行(即如果一整行的單元格都是na的話,那麼則刪除這一行)
df.dropna(axis=1, how="all") # 刪除全為 na 的列(即如果一整列的單元格都是na的話,那麼則刪除這一列)
判斷空值:
df.isnull() # 對應的返回布林值,檢視是否為空的資料
df.notnull() # 與上一條相反
填充缺失值:
df.fillna(value=2, inplace=true) # 對缺失的nan值全部替換為 0
df.fillna(value=2, method="ffill", limit=2)
- limit:表示可以連續填充的最大次數(對於前向和後向填充)
- value:需要填充的值,可以為標量(字串、數值等)或者字典物件
- inspace:表示是否在原來的物件上進行修改而不產生新的物件,true:在原基礎上修改;false:會返回處理後的,新的物件
前方高能,巨坑提示如果你的資料中其實看起來就是空值的,但是這時候有可能為 空白的字串 那麼,你使用fillna
或者dropna
是不會生效的!!!!
小結:對於一些不確定的,或者不一定為空的內容,還是不能直接使用這兩個dropna
、fillna
這兩個來處理缺失值。
相關參考fillna和inplace使用文章,我進行了解
0x03、使用強大的replace
來填充任何值的資料
pandas提供了乙個replace方法,並且這個方法可以使用正則來處理
df.replace(to_replace=r"^na$", value="", inplace=true, regex=true)
- to_replace:被替換的字元
- value:替換後的字元
- inplace:是否在原基礎上進行修改
- regex:是否為正規表示式方式
由於我的**裡面的空值都是寫著na的,所以對於我來說,使用這個方法是最好的乙個實現辦法
如果你的空白字元可能含有空格、換行、製表符等空白字元的話,可以使用這個正則來替換:
df.replace(to_replace=r"^\s*$", value="", inplace=true, regex=true)
Pandas 處理缺失資料
import numpy as np import pandas as pd from pandas import series,dataframes series a b np.nan,c d pd.isnull s 0 false 1 false 2 true 3 false 4 false d...
pandas處理缺失資料
na處理方法 方法 說明 dropna 根據各標籤的值中是否存在缺失資料對軸標籤進行過濾,可通過閾值調節對缺失值得容忍度 fillna 用指定值或插值方法 如ffill和bfill 填充缺失資料 isnull 返回乙個含有布林值的物件,這些布林值表示哪些值是缺失值na,該物件的型別與源型別一樣 no...
pandas處理日期缺失
兩種方法實現 1 dataframe.reindex 調整dataframe的索引以適應新的索引 2 dataframe.resample,可以對時間序列重新取樣,支援補充缺失值 import pandas as pd import os matplotlib inlinedf pd.datafra...