pandas 學習 第7篇:DataFrame - 數據處理(應用、操作索引、重命名、合並)


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:把數據復制到結果中

 

 

參考文檔:

pandas DataFrame


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM