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