我有这个数据框:
Var count mean std
Var1 33214.0 -216.687166 -24.076352
Var2 55381.0 -130.082888 -18.583270
Var3 67469.0 46.732620 15.577540
Var4 55191.0 133.425134 66.712567
Var5 46297.0 -0.240642 -0.048128
Var6 1700.0 -9.200535 -4.600267
Var7 998.0 263.906417 37.700917
Var8 45.0 -11.759358 -2.351872
Var9 2889.0 0.280749 0.140374
Var10 7353.0 216.684492 43.336898
我想删除列mean
和std
中的前导零,并且也保留小数点后的3位数字(四舍五入后)。
我想在列Var
中删除小数点后的数字。
预期结果:
Var count mean std
Var1 33214 -216.687 -24.076
Var2 55381 -130.083 -18.583
Var3 67469 46.733 15.578
Var4 55191 133.425 66.713
Var5 46297 -.241 -.048
Var6 1700 -9.201 -4.600
Var7 998 263.906 37.701
Var8 45 -11.759 -2.352
Var9 2889 .281 .140
Var10 7353 216.684 43.337
答案 0 :(得分:2)
IIUC,您需要使用round()
,astype(str)
和replace
来获取目标列。
df[['mean','std']] = df[['mean','std']].round(3).astype(str).replace('^(-)0.|^0.',r'\1.',regex=True)
请注意,这些列现在将是字符串,如果将它们设置为浮点格式,则0将会正确显示。我不知道删除0的任何格式化方法
print(df)
Var count mean std
0 Var1 33214.0 -216.687 -24.076
1 Var2 55381.0 -130.083 -18.583
2 Var3 67469.0 46.733 15.578
3 Var4 55191.0 133.425 66.713
4 Var5 46297.0 -.241 -.048
5 Var6 1700.0 -9.201 -4.6
6 Var7 998.0 263.906 37.701
7 Var8 45.0 -11.759 -2.352
8 Var9 2889.0 .281 .14
9 Var10 7353.0 216.684 43.337
修改
要在小数点右边填充0,我们将需要拆分并重新排列列的形状。
我在0000.0000
中添加了一个值进行测试。
s = df[['mean','std']].stack().str.split('.',expand=True)
s[2] = s[0] + '.' + s[1].str.ljust(3,'0')
df[['mean','std']] = s.drop([0,1],1).unstack()
Var count mean std
0 Var1 33214.0 -216.687 -24.076
1 Var2 55381.0 -130.083 -18.583
2 Var3 67469.0 46.733 15.578
3 Var4 55191.0 133.425 66.713
4 Var5 46297.0 -.241 -.048
5 Var6 1700.0 -9.201 -4.600
6 Var7 998.0 263.906 37.701
7 Var8 45.0 -11.759 -2.352
8 Var9 2889.0 .281 .140
9 Var10 7353.0 .000 43.337
答案 1 :(得分:0)
# round to 3 digits (it will round on all your columns)
df = df.round(3)
# will convert count to an int and remove the decimal values
df["mean"] = int(df["mean"])
如果要删除前导0,则必须将值转换为字符串。但这是您想做的吗?