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

上一篇:类型重命名 typedef


下一篇:Chrome在Ubuntu中缺少依赖项,无法安装