对数据框中的数据进行处理,使数据格式知足业务需求。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
参考文档: