如果熊猫结尾处带有“-”号,则将值强制转换为负浮点数

时间:2019-04-06 18:07:16

标签: python pandas

在数据框中,我有一列名为“ Val”的列,其中有浮点值,但负值由“-”符号表示。因此,它被解释为对象 即

>>> df['Val'].drop_duplicates().sort_values()
5          0.00000
1873      0.20000-
496      100.00000
425      2.00000
Name: Val, Length: 4, dtype: object

如何将负值转换为真实的负值,然后将列转换为浮点数。

如果要列出一个列表,我会这样做:

if row[i][-1:] == '-':
    row[i] = float(row[i][:-1]) * -1
else:
    row[i] = float(row[i])

熊猫如何做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以使用loc仅更正以-结尾的条目

mask = df.Val.str.endswith('-')
df.loc[mask, 'Val'] = '-' + df.loc[mask, 'Val'].str[:-1]

,然后转换为数字dtype

df['Val'] = pd.to_numeric(df.Val, errors='coerce')

最终结果

5         0.0
1873     -0.2
496     100.0
425       2.0
Name: Val, dtype: float64

答案 1 :(得分:2)

您可以使用str.strip,然后将np.wherestr.endswith一起使用

s1=df.x.str.strip('+|-').astype('float')
np.where(df.x.str.endswith('-'),s1*-1,s1)
array([  0. ,  -0.2, 100. ,   2. ])