为了账号安全,请及时绑定邮箱和手机立即绑定

将带有“N/As”的 DataFrame 转换为浮动以计算百分比变化

将带有“N/As”的 DataFrame 转换为浮动以计算百分比变化

海绵宝宝撒 2021-10-10 16:48:43
我正在尝试将以下 DataFrame(包含几个“N/As”)转换为浮动,以便我可以执行百分比更改操作:d = pd.DataFrame({"A":['N/A','$10.00', '$5.00'],            "B":['N/A', '$10.00', '-$5.00']})最后,我希望结果是:(更新:我不想删除原始的 N/A 值。我想将它们作为占位符保留在那里。)因为没有处理负数的任何标志,所以我不能使用:pct_change(-1)所以,我需要使用:d['A'].diff(-1)/d['A'].shift(-1).abs()但是,我收到错误:TypeError: unsupported operand type(s) for -: 'str' and 'str'第一步,我试图将数据从对象/字符串转换为浮点数,但输出是意外的(对我而言)。我得到浮点数 'NaNs' 而不是实际数字。>d['A_float'] = pd.to_numeric(d['A'], errors='coerce')>d        A         B  A_float0     N/A       N/A      NaN1  $10.00  -$100.00      NaN2   $5.00    -$5.00      NaN>d.dtypesA           objectB           objectA_float    float64dtype: object作为一个简单的测试,我尝试从值中减去“1”,但仍然得到浮点“NaN”。>d['A_float_minus1_test'] = pd.to_numeric(d['A'], errors='coerce')-1>d        A         B  A_float  A_float_minus1_test0     N/A       N/A      NaN                  NaN1  $10.00  -$100.00      NaN                  NaN2   $5.00    -$5.00      NaN                  NaN>d.dtypesA                       objectB                       objectA_float                float64A_float_minus1_test    float64dtype: object有没有一种简单的方法可以获得以下结果?我的想法是将每个DataFrame列单独更改为浮动,然后执行操作。必须有更简单的方法。期望的输出:(更新:我不想删除原始的 N/A 值。我想将它们作为占位符保留在那里。)
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

要将您的列从字符串转换为浮点数,您可以使用apply,如下所示:


d['A_float'] = d['A'].apply(lambda x: float(x.split('$')[1]) if x != '' else 0.0)

本x.split('$')[1]是用来去除$字符(最终前负)。


然后我不确定您要做什么,但是如果您要计算 A 与 B 的百分比,则可以这样使用np.vectorize:


d['Percent'] = np.vectorize(percent)(d['A'],d['B'])

def percent(p1, p2):

     return (100 * p2) / p1


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号