Python 格式化并删除前导的零位字符
我有这个数据框:Python 格式化并删除前导的零位字符,python,pandas,numpy,Python,Pandas,Numpy,我有这个数据框: 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
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,则必须将值转换为字符串。但这是您想要做的吗?IIUC,您需要使用round、astypestr和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的值
那你就有字符串了,你同意吗?我能把那个表导出到Word吗?这个数字呢-130.082888第1行第1列。“\1.”是什么意思?@qwerty它是一个正则表达式,它意味着用第一个捕获组替换任何匹配项,在本例中是-negative标记,如果它不存在,它将被忽略,因此在本例中运行良好。确定。最后一个问题:如果数字是0.000000,则将其转换为.0。你能提供一个解决方案吗?将其转换为.000。是的,只要我能将该表复制到MS Word。
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
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