DataFrame的這些操作和Series很相似,這里簡單介紹一下。
一,應用和應用映射
apply()函數對每個軸應用一個函數,applymap()函數對每個元素應用一個函數:
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)
DataFrame.applymap(self, func)
定義一個函數fun,使用apply()函數把fun應用到由DataFrame對象的列構成的一維數組上,通常fun函數是由聚合函數構成的。
f=lambda x: x.max()-x.min df.apply(f)
定義一個函數foo,使用applymap()函數把函數foo應用於DataFrame對象的各個元素上,
foo=lambda x: '%.2f' % x df.applymap(foo)
轉換數據,調用函數對循環對數據元素進行處理:
DataFrame.transform(self, func, axis=0, *args, **kwargs)
二,操作索引
操縱索引包括:重索引、設置索引、替換軸的索引、重置索引
1,重索引
重索引是指數據框按照新的索引進行排列:
DataFrame.reindex(self, labels=None, index=None, columns=None, axis=None,
method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)
參數注釋:
- labels:array-like,新的軸(axis)標簽,軸由參數axis指定
- index,columns:新索引,如果指定index參數,等價於指定labels和axis=0/'index',如果指定columns,等價於指定labels和axis=1/'columns'
- axis:軸,axis=0/'index'表示行,axis=1/'columns'表示列
- method:用於填充的方法,有效值是None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’,
- None表示不會填充
- ‘backfill’/’bfill’:表示回填,用NA的后面第一個有效值來填充當前的NA
- ‘pad’/’ffill’:表示補填,用前面第一個有效值來填充當前的NA
- ‘nearest’:用最接近NA的有效值來填充當前的NA
- copy:默認值是True,返回新的對象
- level:用於MultiIndex,在一個級別上,與MultiIndex進行匹配。
- fill_value:標量值,默認值是np.NaN,用於對缺失值進行填充的值
- limit:填充的最大次數
- tolerance:可選參數,表示不能完全匹配的原始標簽和新標簽之間的最大距離,匹配位置處的索引值滿足:abs(index_position - target_position)<= tolerance,容差可以是標量值(對所有序列值應用相同的容差),也可以是list-like結構(對每個序列元素應用可變容差),list-like結構包括列表、元組、數組和序列,並且list-like結構的長度和序列的長度和長度必須相同。
2、設置索引
設置索引,可以使用set_index()函數把已有的列轉換為行索引,也可以使用set_axis()函數替換掉已有的軸索引。使用現有的列作為DataFrame的索引:
DataFrame.set_index(self, keys, drop=True, append=False, inplace=False, verify_integrity=False)
參數注釋:
- keys:列標簽,或列標簽的列表,
- drop:默認值是True,表示刪除keys參數指定的列;設置為False,表示不刪除keys參數指定的列。
- append:默認值是False,表示刪除原始行索引;如果設置為True,表示向現有的行索引中追加索引。
- verify_integrity:默認值是False,不檢查新索引是否存在重復值。
3,替換軸的索引
把給定的軸的索引替換為新索引:
DataFrame.set_axis(self, labels, axis=0, inplace=None)
參數注釋:
- labels:新索引的值
- axis:{0 or ‘index’, 1 or ‘columns’}, default 0,指定用於更新的軸
- inplace:是否原地更新
使用新的索引來替換原始的行索引:
>>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) >>> df.set_axis(['a', 'b', 'c'], axis='index', inplace=False) A B a 1 4 b 2 5 c 3 6
4,重置索引
重置索引表示把DataFrame的索引設置為默認值,也就是從0開始到N-1的整數位置索引。設置索引是把列轉換為索引,而重置索引可以認為是把索引轉換為列,對於單級別的索引,常用的參數有:
DataFrame.reset_index(self, drop=False, inplace=False,...)
drop 參數表示是否刪除原始索引,如果設置為False,那么索引轉換為列;如果設置為True,表示把索引刪除。
舉個例子,對於以下數據框,索引是行標簽:
>>> df = pd.DataFrame([('bird', 389.0), ... ('bird', 24.0), ... ('mammal', 80.5), ... ('mammal', np.nan)], ... index=['falcon', 'parrot', 'lion', 'monkey'], ... columns=('class', 'max_speed')) >>> df class max_speed falcon bird 389.0 parrot bird 24.0 lion mammal 80.5 monkey mammal NaN
對數據框重置索引,把原始索引的值轉換為數據框的一列,並添加一個新的整數位置索引。
>>> df.reset_index() index class max_speed 0 falcon bird 389.0 1 parrot bird 24.0 2 lion mammal 80.5 3 monkey mammal NaN
三,重命名軸
對列名或行標簽重命名,可以使用rename()和rename_axis()函數
DataFrame.rename(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors='ignore') DataFrame.rename_axis(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False)
對於rename()函數, 參數 mapper 可以是dick-like 結構,也可以是函數,舉個例子,把DataFrame對象的列名由Timestamp類型轉換為字符串類型:
df.rename(mapper =lambda x: pd.to_datetime(x).strftime('%Y%m%d') if x != 'na_count' else x, axis=1)
四,合並數據
DataFrame的合並(Merge)運算是通過一個或多個鍵把行連接起來,和關系型數據庫的Join操作相同,但是DataFrame的合並只支持等值條件的合並:
DataFrame.merge(self, right, how='inner', left_on=None, right_on=None, left_index=False, right_index=False,
sort=False, suffixes=('_x', '_y'), copy=True)
參數注釋:
- right:合並的右表
- how:指定連接的類型,有效值是inner、outer、left、right,用於指定內連接、full outer、左外、右外連接:
- left_on,right_on:分別用於指定連接的列,當在對應的列上值相同時,兩個表合並的條件成立。
- left_index,right_index:指定索引作為連接條件
- sort:根據連接鍵對合並后的數據進行排序
- suffixes:用於為重名的列指定后綴,默認值是('_x','_y')
- copy:把數據復制到結果中
參考文檔: