基础
以下操作基于python 3.6 windows 10 环境下 通过
将通过实例来演示三者的区别
toward_dict = {1: '东', 2: '南', 3: '西', 4: '北'} df = pd.DataFrame({'house' : list('AABCEFG'), 'price' : [100, 90, '', 50, 120, 150, 200], 'toward' : ['1','1','2','3','','3','2<div>本文来源gaodai.ma#com搞#代!码网_</div>']}) df
map()方法
通过df.(tab)键,发现df的属性列表中有apply() 和 applymap(),但没有map().
map()是python 自带的方法, 可以对df某列内的元素进行操作, 我个人最常用的场景就是有toward_dict
的映射关系 ,为df中的toward
匹配出结果,
df['朝向'] = df.toward.map(toward_dict);df
# 第二种思路, 将df.toward转为int型 df.toward = df.toward.map(lambda x: np.nan if x == '' else x).map(int,na_action='ignore') df['朝向2'] = df.toward.map(toward_dict);df
apply() 方法
更新时间: 2018-08-10
我目前的实际工作中使用apply()
方法比较少, 所以整理的内容比较简陋, 后续涉及到数据分析方面可能会应用比较多些.
先将上面的测试中的map
替换为apply
,看看怎么样?
结果报错了, ValueError
, 还是老老实实写实际操作例子吧 ?
参考DataFrame.apply官方文档
文档中第一个参数:
func : function
Function to apply to each column or row.
意思即是, 将传入的func
应用到每一列或每一行,进行元素级别的运算
第二个参数:
axis : {0 or ‘index’, 1 or ‘columns’}, default 0
Axis along which the function is applied:
0 or ‘index’: apply function to each column. # 注意这里的解释
1 or ‘columns’: apply function to each row.
举例:
这个要特别注意的,
没有继续使用map里的DF, 是因为df.house是字符串, 不能进行np.sum
运算,会报错.
2018年12月3日
新增:
最近在工作中使用到了pandas.apply()
方法,更新如下:
背景介绍:
一个 df
有三个列需要进行计算,change_type
值 为1和0, 1为涨价,0为降价, price
为现价, changed
为涨降价的绝对值, 现求:涨降价的比例, 精确到0位,无小数位,
解决思路:
1.最主要的计算是: 涨降价的绝对值/ 原价
2.最主要的难点是: 涨价的原价 = 现价 – 绝对值
降价的原价 = 现价 + 绝对值
伪代码如下: 涨降价比例 = round(changed/(price 加上或减去 changed), 0)
就是我需求的结果了.