pandas 學習 第3篇:序列的處理(排序、鏈接、替換、更新和缺失值)

對序列進行處理,包括對序列進行排序、追加一個序列、對序列值進行替換、對序列的值進行更新,並處理序列中出現的缺失值。正則表達式

一,序列的排序

 按照值或索引對序列進行排序:併發

Series.sort_values(self, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')
Series.sort_index(self, axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True)

參數註釋:app

  • axis:對Series而言,只能是0
  • ascending:默認值是True,按照升序排序;若是設置爲False,按照降序排序。
  • inplace:是否就地對原始序列進行排序,若是設置爲True,那麼對原始序列進行排序;若是設置爲False,那麼原始序列不會改變,返回有序的序列。
  • kind:排序的方法,有效值是quicksort,mergesort,heapsort,默認值是quicksort
  • na_position:first 把Nan放在順序的開始,last把Nan放在順序的最後
  • level:多級索引的級別,默認是None,按照level 0的索引進行排序;
  • sort_remaining:若是設置爲True,對多級索引而言,其餘級別的索引也會相應的進行排序。

 1,按照值來排序ide

按照序列的值進行排序,Nan放在last位置,函數

>>> s = pd.Series([np.nan, 1, 3, 10, 5])
>>> s.sort_values()
1     1.0
2     3.0
4     5.0
3    10.0
0     NaN
dtype: float64

2,按照索引來排序ui

按照索引的值進行排序spa

>>> s = pd.Series(['a', 'b', 'c', 'd'], index=[3, 2, 1, 4])
>>> s.sort_index()
1    c
2    b
3    a
4    d
dtype: object

二,序列的追加鏈接

使用追加的方法,把序列追加在另外一個序列以後,合併爲一個新的序列:rest

Series.append(self, to_append, ignore_index=False, verify_integrity=False)

參數註釋:code

  • to_append:追加的序列
  • ignore_index:默認值是False,不忽略索引;若是設置爲True,那麼鏈接以後的序列會重建索引。
  • verify_integrity:默認值是False,若是設置爲True,在建立索引時出現重複會拋出異常。

 舉個例子,把兩個序列合併爲一個,當不忽略索引時,把序列的索引做爲合併以後的索引;當忽略索引時,新的序列會重建索引。blog

>>> s1 = pd.Series([1, 2, 3])
>>> s2 = pd.Series([4, 5, 6])
>>> s1.append(s2)
0    1
1    2
2    3
0    4
1    5
2    6
dtype: int64
>>> s1.append(s2, ignore_index=True)
0    1
1    2
2    3
3    4
4    5
5    6
dtype: int64

三,序列值的替換

把序列中的值替換爲另外一個值:

Series.replace(self, to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')

參數註釋:

  • to_replace:參數to_replace是序列中原有的值,查找到該值以後,把該值替換爲參數value指定的值
  • inplace:默認值是False,不就地修改序列
  • limit:替換的最大次數
  • regex:是否把to_replace 解釋爲正則表達式,默認值是False。若是設置爲True,那麼參數to_replace必須是字符串
  • method:有效值是pad、ffill、bfill,當參數to_replace是標量、列表或字典,而且參數value是None時,使用method參數來替換。

場景1:參數to_replace是標量,參數value也是標量

>>> s = pd.Series([0, 1, 2, 3, 4])
>>> s.replace(0, 5)
0    5
1    1
2    2
3    3
4    4
dtype: int64

場景2:參數to_replace是列表,參數value是標量,例如,把序列中匹配to_replace列表中的值替換爲5

>>> s = pd.Series([0, 1, 2, 3, 4])
>>> s.replace([0,2],5)
0    5
1    1
2    5
3    3
4    4
dtype: int64

場景3,參數to_replace是字典,參數value是None,例如,把序列中匹配字典的key的值替換爲字典的value。

>>> s = pd.Series([0, 1, 2, 3, 4])
>>> s.replace({0:5,1:7})
0    5
1    7
2    2
3    3
4    4
dtype: int64

四,序列的更新

序列值的更新,有3種方式,第一種方式是使用標量值更新序列的單個值,第二種方式是經過索引切片修改序列的多個值,第三種方式是使用序列來更新一個序列。

1,使用標量來更新序列

索引到索引的單個值,經過賦值來修改序列

>>> s = pd.Series([0, 1, 2, 3, 4])
>>> s.iat[1]=7
>>> s
0    0
1    7
2    2
3    3
4    4
dtype: int64

2,使用切片來更新序列

經過loc屬性得到序列的切片,經過賦值一個列表來修改序列的多個值:

>>> s.loc[1:2]=[2,3]
>>> s
0    0
1    2
2    3
3    3
4    4
dtype: int64

3,使用序列來更新序列

按照索引對齊方式就地修改序列,也就是說,在修改原始序列的值時,原始序列的索引必須和參數序列進行匹配,把索引相同的值修改成新值。

Series.update(self, other)

舉個例子,使用update()函數,修改索引爲0和2的值爲'd'和'e':

>>> s = pd.Series(['a', 'b', 'c'])
>>> s.update(pd.Series(['d', 'e'], index=[0, 2]))
>>> s
0    d
1    b
2    e
dtype: object

五,處理序列的缺失值

缺失值使用NumPy.NaN ,NumPy.nan或者None來表示,使用isna()函數來檢查是否存在NA,使用dropna()刪除序列中的NA值,使用fillna()函數填充缺失值,

 1,檢查序列是否存在缺失值

>>> s=pd.Series(data=[1,2,np.NaN,4])
>>> s.isna()
0    False
1    False
2     True
3    False
dtype: bool

2,刪除序列中的缺失值

>>> s.dropna()
0    1.0
1    2.0
3    4.0
dtype: float64

六,根據相鄰的有效數據來填充

使用fillna()函數,找到缺失數據相鄰的有效數據,使用該有效數據來填充缺失值:

Series.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

參數註釋:

  • value:用於填充缺失的值
  • method:尋找有效值的方法,回填(‘backfill’, ‘bfill’),補填( ‘pad’, ‘ffill’) 和固定值填充(method= None),默認值是None
  • downcast:向下轉換,儘量把類型轉換爲較低的類型,默認值是None,例如,儘量把float64轉換爲Int64。

1,回填

回填是指backfill和bfill 方法,用缺失值以後的第一有效值來填充

>>> s.fillna(method='bfill')
0    1.0
1    2.0
2    4.0
3    4.0
dtype: float64

2,補填

補填是指 pad和ffill方法,用缺失值以前的有效值來填充

>>> s.fillna(method='ffill')
0    1.0
1    2.0
2    2.0
3    4.0
dtype: float64

3,固定值填充

當method爲None時,使用value參數指定的值來填充缺失值,固定值能夠是均值、中位數、和衆數,

>>> s.fillna(value=3,method=None)
0    1.0
1    2.0
2    3.0
3    4.0
dtype: float64

七,使用插補法來填充

使用插補法擬合出缺失的值,而後用擬合值來填充缺失值:

Series.interpolate(self, method='linear', axis=0, limit=None, inplace=False, limit_direction='forward', limit_area=None, downcast=None, **kwargs)

參數註釋:

  • limit_direction:限制的方向,有效值是{‘forward’, ‘backward’, ‘both’},若是指定方向,使用該方向來填充NaN
  • limit_area:有效值是{None,  ‘inside’, ‘outside’},None表示沒有填充限制,inside表示只填充那些被有效值圍繞的NaN;outside表示在有效值以外填充NaN(推斷)。
  • method:得到插值的方法,默認值是線性(linear),已經實現的method是:linear、time、index、pad、‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘spline’, ‘barycentric’, ‘polynomial’,‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’, ‘akima’,‘from_derivatives’
  • **kwargs:關鍵字參數,傳遞給插值函數

常見的插補方法是線性迴歸和多項式迴歸

1,線性迴歸擬合

linear是默認的擬合方法,linear 忽略索引,併發序列值做爲等間距,

>>> s.interpolate()
0    1.0
1    2.0
2    3.0
3    4.0
dtype: float64

2,多項式擬合

polynomial表示多項式擬合,須要傳遞order參數:

>>> s.interpolate(method='polynomial',order=2)
0    1.0
1    2.0
2    3.0
3    4.0
dtype: float64

 

參考文檔:

相關文章
相關標籤/搜索