我有一列包含数字和字符串。例如:
Result:
Failed
8.05
9
7
如何更改数据以显示两位小数,即如下?
Result:
Failed
8.05
9.00
7.00
我正在尝试以下操作,但不起作用。谢谢你的帮助!
df['Result'] = df['Result'].apply('{:.2f}'.format)
答案 0 :(得分:2)
我认为需要创建布尔掩码:
#numeric with strings
df = pd.DataFrame({'Result':['Failed',8.05,9,7]})
mask = pd.to_numeric(df['Result'], errors='coerce').notnull()
df.loc[mask, 'Result'] = df.loc[mask, 'Result'].apply('{:.2f}'.format)
print (df)
0 Failed
1 8.05
2 9.00
3 7.00
如果需要所有字符串,请首先将其强制转换为float
:
df = pd.DataFrame({'Result':['Failed','8.05','9','7']})
mask = pd.to_numeric(df['Result'], errors='coerce').notnull()
df.loc[mask, 'Result'] = df.loc[mask, 'Result'].astype(float).apply('{:.2f}'.format)
print (df)
Result
0 Failed
1 8.05
2 9.00
3 7.00
答案 1 :(得分:1)
您可以将pd.Series.apply
与三元表达式一起使用:
s = pd.Series(['Failed', 8.05, 9, 7])
s = s.apply(lambda x: f'{x:.2f}' if not isinstance(x, str) else x)
print(s)
0 Failed
1 8.05
2 9.00
3 7.00
dtype: object
请注意,在混合数字和非数字类型时,不建议您使用这种结构来构造数据。另外,您将数字数据存储为字符串,这很昂贵。