基础
以下操作基于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']}) df
map()方法
通过df.(tab)键,发现df的属性列表中有apply() 和 applymap(),但没有map().
map()是python 自带的方法, 可以对df某列内的元素进行操作, 我个人最常用的场景就是有toward_dict
的映射关系 ,为df中的toward
匹配出结果,
df['朝向'] = df.toward.map(toward_dict);df
结果就是没有匹配出来, why"htmlcode">
第一种思路:`toward_dict`的key转换为str型 toward_dict2 = dict((str(key), val) for key, val in toward_dict.items())
# 第二种思路, 将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
,看看怎么样"_blank" href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html" rel="external nofollow" >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)
就是我需求的结果了.
解决方案 如下:
以下代码经过win 10 环境 python3.6 版本测试通过
import pandas as pd df = pd.DataFrame({'change_type' : [1,1,0,0,1,0], 'price' : [100, 90, 50, 120, 150, 200], 'changed' : [10,8,4,11,14,10]}) def get_round(change_type, price, changed_val): """ 策略设计 """ if change_type == 0: return round(changed_val/(price + changed_val) * 100, 2) elif change_type == 1: return round(changed_val/(price - changed_val) * 100, 2) else: print(f'{change} is not exists') # 策略实现 df['round'] = df.apply(lambda x: get_round(x['change_type'], x['price'], x['changed']),axis=1)
若有问题, 欢迎指正, 谢谢
applymap()
参考DataFrame.applymap官方文档:
func : callable
Python function, returns a single value from a single value.
文档很简单, 只有一个参数, 即传入的func
方法
样例参考文档吧, 没有比这个更简单了
总结:
map() 方法是pandas.series.map()方法, 对DF中的元素级别的操作, 可以对df的某列或某多列, 可以参考文档
apply(func) 是DF的属性, 对DF中的行数据或列数据应用func
操作.
applymap(func) 也是DF的属性, 对整个DF所有元素应用func
操作
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】