我正在尝试将以下 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
添加回答
举报
0/150
提交
取消