pandas使用浮點值NaN(Not a Number)表示缺失值。咱們稱NaN爲容易檢測到的標識值:數組
import pandas as pd import numpy as np string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado']) print(string_data) print(string_data.isnull())
在pandas中,將缺失值標爲NA,意思是not available(不可用)。dom
NA數據能夠是不存在的數據或者是存在但不可觀察的數據。Python內建的None值在對象數組中也被當作NA處理。3d
string_data[0] = None print(string_data.isnull())
dropna方法在過濾缺失值時很是有用。code
在Series中使用dropna,會返回Series中全部非空數據及其索引值。對象
data = pd.Series([1,NA, 3.5, NA, 7]) print(data.dropna())
在處理DataFrame對象時,可能須要刪除所有爲NA或包含NA的行或列。blog
dropna默認狀況下會刪除包含缺失值的行:索引
data1 = pd.DataFrame([[1. ,6.5, 3.],[1., NA, NA],[NA, NA, NA],[NA, 6.5, 3.]]) cleaned = data1.dropna() print(data1) print(cleaned)
傳入how = 'all'時,能夠刪除全部值均爲NA的行:string
data2 = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3.]]) cleaned = data2.dropna(how='all') print(data2) print(cleaned)
若是須要用一樣的方式刪除列,傳入參數axis=1:pandas
data2[4] = NA print(data2) cleaned = data2.dropna(axis=1,how='all') print(cleaned)
大多數狀況下,使用fillna方法來補全缺失值。調用fillna時,能夠使用一個常數來替代缺失值。ast
df = pd.DataFrame(np.random.randn(7,3)) df.iloc[:4, 1] = NA df.iloc[:2, 2] = NA print(df) print(df.fillna(0))
能夠在調用fillna時使用字典,爲不一樣列設定不一樣的填充值:
df.fillna({1:0.5,2:0})
fillna返回的是一個新對象,可是你也能夠修改已經存在的對象。
_ = df.fillna(0, inplace=True) print(df)
data = pd.DataFrame({'k1': ['one', 'two'] * 3 + ['two'], 'k2': [1, 1, 2, 3, 3, 4, 4]}) print(data) print(data.duplicated())
DataFrame的duplicated方法返回的是一個布爾值的Series,這個Series反應的是每一行是否存在重複(與以前出現過得行相同)狀況:
drop_duplicates返回的是DataFrame,內容是duplicated返回數組中爲False的部分:
print(data.drop_duplicates())
這些方法默認都是對列進行操做。
能夠指定數據的任何子集來檢測是否有重複。
假設咱們有一個額外的列,想基於‘k1’列去除重複值。
data['v1'] = range(7) print(data) print(data.drop_duplicates(['k1']))
duplicated和drop_duplicates默認都是保留第一個觀測到的值。傳入參數keep='last'將會返回最後一個:
print(data.drop_duplicates(['k1','k2'],keep='last'))