1、apply、applymap、map
对数据进行处理的时候,使用循环往往会大大降低代码的执行效率,但是通过pandas中封装好的函数,则可以极大提升执行效率;
DataFrame.apply(self, func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), **kwds) # 轴级应用函数(默认axis=0)
DataFrame.applymap(self, func) # 元素级应用函数
map() #python 内置函数,常与匿名函数搭配使用
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), columns=[‘col1‘, ‘col2‘, ‘col3‘]) print df.applymap(lambda x: x*100) col1 col2 col3 0 -46.794441 -39.065235 -43.029788 1 -106.007018 27.150164 39.014999 2 -82.441000 -183.847367 28.454017 3 31.048271 -154.712457 -121.747535 4 49.811200 -100.607442 -137.614507 print df.apply(np.mean, axis=0) col1 0.645906 col2 -0.499199 col3 -0.021930 dtype: float64 print df.apply(np.mean, axis=0) 0 -0.143159 1 0.772798 2 -0.030872 3 -0.076344 4 -0.314461 dtype: float64 print df[‘col1‘].map(lambda x: x*100) 0 27.613782 1 52.613560 2 139.238366 3 56.926986 4 46.560222 Name: col1, dtype: float64
2、append、join、merge、concat
如今数据为方便存储以及节省存储空间,多为关系型数据,例如商场的数据库中,分为顾客的个人属性信息、购物行为信息、商场的商品属性信息、存货信息等,为了进行数据分析,往往需要将这几个表按照制定的键进行连接,得到我们最终想要的数据宽表。
常用的有如下集中方法,都是pandas模块已经封装好的,直接修改里面的参数,调用即可。个人感觉,merge()在连接表的时候更好用一些,因为可选参数较多,可以满足实际中复杂的需求。append主要用于添加数据,并不是连接表。
pandas.concat(objs, axis=0, join=‘outer‘, join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True) #沿特定轴连接pandas对象,沿其他轴使用可选的设置逻辑
DataFrame.join(self, other, on=None, how=‘left‘, lsuffix=‘‘, rsuffix=‘‘, sort=False)
DataFrame.merge(self, right, how=‘inner‘, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(‘_x‘, ‘_y‘), copy=True, indicator=False, validate=None)
on:连接键 | left_on: 左表的连接键 | right_on:右表的连接键 | left_index=True将使用左表的索引作为连接键 | right_index=True 类似left_index
how:连接方式
suffixes:表的列名后缀
DataFrame.
append
(self, other, ignore_index=False, verify_integrity=False, sort=None) # 将其他行附加到调用者的末尾,返回一个新对象
import pandas as pd df = pd.DataFrame([[1, 2], [3, 4]], columns=list(‘AB‘)) df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list(‘AB‘)) print df.append(df2) A B 0 1 2 1 3 4 0 5 6 1 7 8 print df.append(df2, ignore_index=True) A B 0 1 2 1 3 4 2 5 6 3 7 8