格式化并删除前导零位

2024-06-17 11:55:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个数据框:

   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

Tags: varcountmeanstd小数点var1var2var3
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
# 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,则必须将值转换为字符串。但这是你想做的事吗

相关问题 更多 >