一、空值 isna
Pands 中 NaN(Not-A-Number) 視為空值,利用函式 isna 和 notna 進行判斷。
注意:不要利用是否等於None判斷是否為空!
import pandas as pd
pd.NA == None # False
pd.isna(pd.NA) # True
pd.isna(None) # True
pd.notna(pd.NA) # False
pd.notna(None) # False
二、是否為空 isnull
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(12).reshape(3,4))
df.iloc[1,1] = np.NaN
df.isnull()
df.isnull().sum() # 按列檢視
np.any(df.isnull())
np.all(df.isnull())
# 空值填充
df.fillna(0)
三、isnull & isna 區別
isna 判斷是否數值,一般是數值型別的null。
isnull 判斷字元型是否有值,可以判斷所有的空值,常用於資料框 DataFrame 當中。
四、無窮值 isfinite
Pandas 中無窮值為 inf 和 -inf 表示。
如果不處理,可能導致報錯:ValueError: Input contains NaN, infinity or a value too large for
dtype('float64').。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(12).reshape(3,4))
df.iloc[0,2] = np.inf
df.iloc[1,2] = None
df.iloc[2,2] = np.nan
df
'''
0 1 2 3
0 0 1 inf 3
1 4 5 NaN 7
2 8 9 NaN 11
'''
判斷資料是否為有限
#學習中遇到問題沒人解答?小編建立了一個Python學習交流群:725638078
# 判斷是否有限
np.isfinite(df)
np.all(np.isfinite(df)) # 全部
np.isfinite(df).all() # 按列
np.isfinite(df.T).all() # 按行
替換無限值
# 替換
df.replace([np.inf, -np.inf], 0)
刪除無限值所在行列
df[np.isfinite(df.T).all()] # 刪除行
df.loc[:, np.isfinite(df).all()] # 刪除列