刪除行列
data = pd.DataFrame(np.arange(16).reshape((4, 4)), index=['Ohio', 'Colorado', 'Utah', 'New York'], columns=['one', 'two', 'three', 'four'])data.drop(['Colorado', 'Ohio'])data.drop('two', axis=1)data.drop(['two', 'four'], axis='columns')data.drop('two', axis=1,inplace=True)處理缺失值
Pandas中,將缺失值設置為NA,即Not Available,
dropna
根據每個標籤的值是否是缺失數據來篩選軸標籤,並根據允許丟失的數據來確定閥值
fillna
用某些值來填充缺失的數據或使用插值的方法
isnull
返回表明哪些值是缺失值的布爾值
notnull
isnull的反函數string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])string_data.isnull() 0 False 1 False 2 True 3 False dtype: bool
from numpy import nan as NAdata = pd.Series([1, NA, 3.5, NA, 7])data.dropna() 0 1.0 2 3.5 4 7.0 dtype: float64data[data.notnull()] 0 1.0 2 3.5 4 7.0 dtype: float64data = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3.]]) df.fillna(0) df.fillna({1: 0.5, 2: 0})處理重複值
duplicated
返回一個布爾值series,反應每一個行是否存在重複值drop_duplicated
兩個函數都是默認都是對行進行操作,data = pd.DataFrame({'k1': ['one', 'two'] * 3 + ['two'], 'k2': [1, 1, 2, 3, 3, 4, 4]}) k1 k2 0 one 1 1 two 1 2 one 2 3 two 3 4 one 3 5 two 4 6 two 4data.duplicated() 0 False 1 False 2 False 3 False 4 False 5 False 6 True dtype: booldata.drop_duplicates()data['v1'] = range(7)data.drop_duplicates(['k1']) k1 k2 v1 0 one 1 0 1 two 1 1data.drop_duplicates(['k1', 'k2'], keep='last') k1 k2 v1 0 one 1 0 1 two 1 1 2 one 2 2 3 two 3 3 4 one 3 4 6 two 4 6pandas中的向量化字符串函數
清理雜亂的數據集用於分析通常需要大量的字符串處理和正則化,包含字符串的列有時含有缺失數據,使事情變得複雜
cat
根據可選的分隔符按元素黏合字符串contains
返回是否含某個模式,正則表達式的布爾值數組
count模式出現的次數
extract
使用正則表達式從字符串series中分組抽籤一個或者多個字符串,返回結果是每個分組形成的一列dataframe
endswith等價於對每個元素使用x.endwith
startswith
等價於對每個元素使用startswithfindall
找出字符串中的所有模式,正則表達式的匹配項目,以列表返回
get
對每個元素進行索引
isalnum
isalpha
isdecimal
isslower
isupper
join
根據傳遞的分隔符,將series中的中的字符串聯合
len
計算每個字符串的長度
match
使用re.match將正則表達式應用到每個元素
pad
將空白加到字符串的左邊,右邊或者兩邊
center
等價於pad(slide='both')
repeat重複值(s.str.repeat(3)等價於對米格字符串進行x*3)slice
對字符串進行切片
split
以分割符或者正則表達式對字符進行拆分
strip
rstrip/lstripdata = {'Dave': 'dave@google.com', 'Steve': 'steve@gmail.com', 'Rob': 'rob@gmail.com', 'Wes': np.nan}data = pd.Series(data)data.str.contains('gmail') Dave False Steve True Rob True Wes NaN dtype: objectimport repattern = '([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\\.([A-Z]{2,4})'data.str.findall(pattern, flags=re.IGNORECASE) Dave [(dave, google, com)] Steve [(steve, gmail, com)] Rob [(rob, gmail, com)] Wes NaN dtype: objectdata.str.extract(pattern, flags=re.IGNORECASE) 0 1 2 Dave dave google com Steve steve gmail com Rob rob gmail com Wes NaN NaN NaNmatches = data.str.match(pattern, flags=re.IGNORECASE)matches Dave True Steve True Rob True Wes NaN dtype: objectmatches.str.get(1)matches.str[0] Dave NaN Steve NaN Rob NaN Wes NaN dtype: float64data.str[:5] Dave dave@ Steve steve Rob rob@g Wes NaN dtype: object隨機採樣
DataFrame.take(indices, axis=0, is_copy=None, **kwargs) [source]
沿著坐標軸返回給定位置索引中的元素。
這意味著我們沒有根據對象的索引屬性中的實際值進行索引。我們根據元素在對象中的實際位置建立索引。
參數:
indices :array-like
一個整數數組,指示要take的位置。
axis :{0 或 『index』, 1 或 『columns』, None}, 默認為 0
選擇元素的軸。0表示選擇行,1表示選擇列。
is_copy :bool
在pandas 1.0之前,
is_copy=False可以指定以確保返回值是實際副本。
從pandas 1.0開始, take始終返回一個副本,
因此不推薦使用該關鍵字。
從1.0.0版開始不推薦使用。
**kwargs
與兼容numpy.take()。對輸出沒有影響。
返回值:
taken:與調用者相同的類型
array-like ,包含從對象中獲取的元素。
>>> df = pd.DataFrame([('falcon', 'bird', 389.0),... ('parrot', 'bird', 24.0),... ('lion', 'mammal', 80.5),... ('monkey', 'mammal', np.nan)],... columns=['name', 'class', 'max_speed'],... index=[0, 2, 3, 1])>>> df name class max_speed0 falcon bird 389.02 parrot bird 24.03 lion mammal 80.51 monkey mammal NaN>>> df.take([0, 3]) name class max_speed0 falcon bird 389.01 monkey mammal NaN>>> df.take([1, 2], axis=1) class max_speed0 bird 389.02 bird 24.03 mammal 80.51 mammal NaN>>> df.take([-1, -2]) name class max_speed1 monkey mammal NaN3 lion mammal 80.5DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None) [source]
從對象軸返回隨機的項目樣本。
您可以使用random_state來實現重現性
參數:
n :int, 可選
從軸返回的項目數。不能與frac一起使用。
如果frac = None,則Default = 1。
frac :float, 可選
要返回的軸項的Fraction。不能與n一起使用。
replace:bool, 默認為 False
允許或不允許對同一行進行多次抽樣。
weights : str或ndarray-like, 可選
默認的『None』將導致相等的概率權重。
如果傳遞了一個Series,將與目標對象上的索引對齊。
權重中未被採樣對象發現的索引值將被忽略,
權重中未被採樣對象的索引值將被賦值為零。
如果在DataFrame上調用,
將在axis = 0時接受列的名稱。
除非權值是一個Series,
否則權值必須與被採樣的軸線長度相同。
如果權重的和不是1,它們將被規範化為和為1。
weights列中缺失的值將被視為零。不允許無限值。
random_state :int,array-like,
BitGenerator, np.random.RandomState, 可選
如果int,array-like,或BitGenerator (NumPy>=1.17),
種子為隨機數生成器,如果np.random。隨機狀態,用作numpy隨機狀態對象。
在版本1.1.0中改變:array-like和BitGenerator(用於NumPy>=1.17),
對象現在作為種子傳遞給np.random.RandomState()
axis :{0 或 『index』, 1 或 『columns』, None}, 默認為 None
從軸返回的項目數。不能與frac一起使用。如果frac = None,
則Default = 1。
返回值:
Series 或 DataFrame
與調用者相同類型的新對象,
包含從調用者對象中隨機取樣的n項。
>>> df = pd.DataFrame({'num_legs': [2, 4, 8, 0],... 'num_wings': [2, 0, 0, 0],... 'num_specimen_seen': [10, 2, 1, 8]},... index=['falcon', 'dog', 'spider', 'fish'])>>> df num_legs num_wings num_specimen_seenfalcon 2 2 10dog 4 0 2spider 8 0 1fish 0 0 8>>> df['num_legs'].sample(n=3, random_state=1)fish 0spider 8falcon 2Name: num_legs, dtype: int64>>> df.sample(frac=0.5, replace=True, random_state=1) num_legs num_wings num_specimen_seendog 4 0 2fish 0 0 8>>> df.sample(frac=2, replace=True, random_state=1) num_legs num_wings num_specimen_seendog 4 0 2fish 0 0 8falcon 2 2 10falcon 2 2 10fish 0 0 8dog 4 0 2fish 0 0 8dog 4 0 2>>> df.sample(n=2, weights='num_specimen_seen', random_state=1) num_legs num_wings num_specimen_seenfalcon 2 2 10fish 0 0 8