首页 > 解决方案 > 舍入包含数字和字符串的数据框中的所有数字?

问题描述

我有一个包含浮点数和字符串的数据框。我想将所有浮点数四舍五入到小数点后一位。

下面描述了一个示例 df;

Y     1      2      3
X
1    5.19   "a"    "a"
2    6.68   6.22   "b"
3    "b"    8.23   8.55

现在,我想将所有浮点数四舍五入到小数点后 1 位。我的实际数据框比这大得多,但字符串 arr 只有“a”或“b”。

我试过这样做df[(df != "a") & (df != "b")] = df.round(1),但这并没有改变什么?

标签: pythonpandasdataframe

解决方案


尝试pd.to_numeric

df.apply(pd.to_numeric,errors='coerce').round(1).fillna(df)

或者:

s = df.stack()
pd.to_numeric(s,errors='coerce').round(1).fillna(s).unstack()

Y    1    2    3
X               
1  5.2  "a"  "a"
2  6.7  6.2  "b"
3  "b"  8.2  8.6

根据评论编辑:

s = df.stack()
s1 = pd.to_numeric(s,errors='coerce').round(1)
s1.astype(str).add('%').mask(s1.isna(),s).unstack()

Y     1     2     3
X                  
1  5.2%   "a"   "a"
2  6.7%  6.2%   "b"
3   "b"  8.2%  8.6%

推荐阅读