對數據框中的數據進行處理,使數據格式知足業務需求。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
舉個例子,向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')
參數註釋:
舉個例子,把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')
參數註釋:
2,按照索引排序
按照索引列進行排序:
DataFrame.sort_index(self, axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)
參數註釋:
寬格式是指:一列或多列做爲標識變量(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列是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)
參數註釋:
重塑數據的流程:
舉個例子,有以下長格式的數據:
>>> 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
透視表是指按照特定的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)
參數註釋:
例如,對長數據進行重塑,得到透視表:
>>> df.pivot_table(values='value',index='idA',columns='variable',aggfunc='mean') variable varB varC idA a 1 2 b 3 4 c 5 6
參考文檔: