在数据框中,我有一列名为“ 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])
熊猫如何做到这一点?
答案 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.where
与str.endswith
一起使用
s1=df.x.str.strip('+|-').astype('float')
np.where(df.x.str.endswith('-'),s1*-1,s1)
array([ 0. , -0.2, 100. , 2. ])