pandas 學習 第9篇:DataFrame 數據處理(操做列、類型轉換、缺失值、排序、長寬格式、透視表)

對數據框中的數據進行處理,使數據格式知足業務需求。html

一,增長列或刪除列

向數據框中增長新列或刪除列,各有兩種方法。python

1,簡單方法算法

經過爲一個新列賦值來向數據框中增長新列,新列始終處於列的末尾:函數

>>> df['new']='a'

經過del 命令來刪除數據框中的列:ui

>>> del df['new']

2,插入新列spa

 使用insert()函數向數據框中插入新列,能夠指定新列的位置:code

DataFrame.insert(self, loc, column, value, allow_duplicates=False)

參數註釋:htm

  • loc:int,插入列的位置,該位置索引必須0 <= loc <= len(columns)
  • column:插入列的名稱
  • value:插入列的值,能夠是單個標量值,插入列的值都是相同的;能夠是序列或array-like,爲每一行的列設置一個值。
  • allow_duplicates :是否容許列重名,默認值是False,不容許。

舉個例子,向df的末尾插入一列,列值都是a:blog

>>> df.insert(3,'new','a')

3,使用drop()函數刪除行或列排序

使用drop()函數來刪除行或列:

DataFrame.drop(self, labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

參數註釋:

  • labels:要刪除的行標籤或列標籤
  • axis:軸,0 或 ‘index’ 表示行, 1 或 ‘columns’表示列,default 0,
  • index:設置index=drop_labels 等價於設置 labels=drop_labels和 axis=0
  • columns:設置columns=drop_labels 等價於設置 labels=drop_labels和 axis=1
  • level:int或 level name,對於MultiIndex,刪除參數level指定的索引

舉個例子,把df的列new刪除:

>>> df.drop(labels='new',axis=1)

二,列數據類型轉換

astype(dtype) 函數用於把數據框的列轉換爲特定的類型,dtype能夠是pandas支持的類型,也能夠是numpy.dtype,也能夠是Python類型:

把數據框的列改變爲字符串類型,str是python類型,'object'是pandas支持的字符串類型:

df['col_name'].astype(str)
df['col_name'].astype('object')

其餘轉換類型的函數

使用Pandas提供的函數如to_numeric()、to_datetime()

三,處理缺失值

pandas支持缺失值的檢測、刪除和填充,缺失值NA是指數值類型的NaN和None,NaN可使用numpy.nan來設置。

from numpy import nan as NA

1,檢測缺失值

檢測數據框的缺失值,若是某一個cell爲NA值,那麼在該Cell所在的位置上顯示爲True。

DataFrame.isna(self)
DataFrame.notna(self)

把包含缺失值的行顯示出來:

df_na = df[df.isna().any(axis=1)]

2,刪除缺失值

當檢測到行或列中包含缺失值時,能夠刪除改行或該列:

DataFrame.dropna(self, axis=0, how='any', thresh=None inplace=False)

參數註釋:

axis: 軸,默認值是0。0和index表示行,當行中任意列包含缺失值時,刪除該行;1或columns表示列,當列中包含缺失值時,刪除改行。

how:默認值是any,表示當軸(axis)中出現任意一個缺失值時,刪除該軸;若是設置爲all,表示只有軸中的全部值都缺失時,纔會刪除該軸。

thresh:默認值是None,當出現多少個有效值,不認爲是缺失

3,填充缺失值

使用特定的值或方法來填充缺失值:

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

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

四,排序

pandas能夠按照索引來排序,也能夠按照值來排序。

1,按照列值來排序

使用sort_values()函數,按照列值進行排序:

DataFrame.sort_values(self, by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')

參數註釋:

  • by:str 或 list of str,若是axis=0,by指定的是行標籤,函數按照行標籤來排序,若是axis=1,by指定的是列名,函數按照列標籤來排序
  • axis:0或index表示行,1或columns表示列
  • kind:排序的算法,默認值是quicksort,有效的排序算法有:‘quicksort’, ‘mergesort’, ‘heapsort’
  • na_position :有效值是 ‘first’, ‘last’, default ‘last’,表示NA的位置。

2,按照索引排序

按照索引列進行排序:

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

參數註釋:

  • level:對於MultiIndex,經過參數level來指定索引的級別或name
  • sort_remaining:bool,default True,對於MultiIndex,是否把其餘級別的索引也同步排序。

五,長寬格式的轉換

寬格式是指:一列或多列做爲標識變量(id_vars),其餘變量做爲度量變量(value_vars),直觀上看,這種格式的數據比較寬,舉個列子,列名是:id一、id二、var一、var二、var3,一行能夠表示多個度量變量的值。

而長格式是指在一行中,除了標識變量(id_vars),其餘列是variable和name,從寬格式轉換爲長格式,會使得數據行數增長,直觀上看,這種格式的數據比較長,舉個例子,列名是:id一、id二、variable、value,一行只表示一個度量變量的值。

在寬格式轉換爲長格式的過程當中,寬格式中的多個度量變量進行了分裂,使得長格式中的每一行,實際上,只表示一個度量變量的值。

有以下寬數據:

>>> df = pd.DataFrame({'idA': {0: 'a', 1: 'b', 2: 'c'},
...                    'varB': {0: 1, 1: 3, 2: 5},
...                    'varC': {0: 2, 1: 4, 2: 6}})
>>> df
  idA  varB  varC
0   a     1     2
1   b     3     4
2   c     5     6

1,融合數據(melt)

把數據從寬格式轉換爲長格式

DataFrame.melt(self, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

參數註釋:

  • id_vars:做爲標識變量的列
  • value_vars:做爲值的列
  • var_name:默認值是variable,對長格式中度量變量的列名所在的列進行命名
  • value_name:默認值是value,對長格式中度量變量的列值所在的列進行命名
  • col_level:若是列是MultiIndex,使用這個level的索引進行melt

舉個例子,把示例中的寬數據轉換爲長數據,id列是idA,度量變量是varB,獲得以下長數據:

>>> df.melt(id_vars='idA',value_vars='varB')
  idA variable  value
0   a     varB      1
1   b     varB      3
2   c     varB      5

id列是idA,度量變量是varB和varC,獲得以下長數據:

>>> df.melt(id_vars='idA',value_vars=['varB','varC'])
  idA variable  value
0   a     varB      1
1   b     varB      3
2   c     varB      5
3   a     varC      2
4   b     varC      4
5   c     varC      6

2,重塑數據(pivot)

把數據從長格式轉換爲寬格式,返回按照特定的index或column重塑的DataFrame:

DataFrame.pivot(self, index=None, columns=None, values=None)

參數註釋:

  • index:用於建立新DataFrame的索引,至關於分組列,相同索引的行稱爲一個小分組。
  • columns:根據columns指定的列值來建立新DataFame的列名,使用該參數指定的列來建立結果的列名。
  • values:和columns對應,表示相應列的列值,用於填充結果列的列值

重塑數據的流程:

  • 根據index的惟一值進行分組,
  • 把columns指定的列的惟一值做爲結果的列名,即,列的值做爲結果的列名
  • 把values對應的列值做爲新列名的值,即,把列的值做爲結果中對應列的值

舉個例子,有以下長格式的數據:

>>> df=df.melt(id_vars='idA',value_vars=['varB','varC'])
>>> df
  idA variable  value
0   a     varB      1
1   b     varB      3
2   c     varB      5
3   a     varC      2
4   b     varC      4
5   c     varC      6

使用pivot把長格式轉換爲寬格式,按照idA列進行分組,把variable的列值做爲結果的列名,把values的列值做爲結果列的值:

>>> df.pivot(values='value',columns='variable',index='idA')
variable  varB  varC
idA                 
a            1     2
b            3     4
c            5     6

重塑的數據包含行索引idA,列標籤varB和varC,其中variable是列標籤的name。

使用reset_index()函數把行索引轉換爲列,其中variable是列索引的名稱:

>>> df.pivot(values='value',columns='variable',index='idA').reset_index()
variable idA  varB  varC
0          a     1     2
1          b     3     4
2          c     5     6

六,透視表(pivot_table)

透視表是指按照特定的index和columns進行聚合操做以後的表,該函數和pivot函數的行爲類似,只不過會對值進行聚合操做:

DataFrame.pivot_table(self, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)

參數註釋:

  • values:聚合的列
  • index:分組器,做爲結果的索引
  • columns:分組器,做爲結果的列
  • aggfunc:聚合的函數
  • fill_value:用於填充缺失值的值
  • margins:bool,默認值是True,把全部行或列的值加和,計算subtotal(小組和)或grand total(總合)
  • margins_name:str,默認值是All,當margins爲Ture時,爲每一個彙總設置名稱。
  • observed:boolean, default False,僅適用於分組器是分類索引的。

例如,對長數據進行重塑,得到透視表:

>>> df.pivot_table(values='value',index='idA',columns='variable',aggfunc='mean')
variable  varB  varC
idA                 
a            1     2
b            3     4
c            5     6

 

 

 

參考文檔:

pandas DataFrame

相關文章
相關標籤/搜索