numpy 格式化并删除前导零- Pandas

hk8txs48  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(75)

我有这个数据框架:

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

我想删除meanstd列中的前导零,同时保留小数点后的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
js4nwp54

js4nwp541#

您需要使用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
ubof19bj

ubof19bj2#

# 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,你必须将值转换为字符串。但这是你想做的事吗?

相关问题