使用熊猫“to_csv”防止尾随零

sc2*_*c28 4 python casting dataframe pandas d3.js

我正在尝试将 CSV 字符串导出到 D3 Web 应用程序,但该命令to_csv坚持向数据添加尾随 0,这阻止了 D3 的正确使用。

这是一个说明问题的最小示例。

我的(简化的)数据框是:

>>> df = pd.DataFrame([['Alex',20.0000, 50.650]],columns=['Name','Age', 'Weight'])
   Name   Age  Weight
0  Alex  20.0   50.65
Run Code Online (Sandbox Code Playgroud)

df['Age']包含 a float,如下所示:

>>> df['Age']
0    20.0
Name: Age, dtype: float64
Run Code Online (Sandbox Code Playgroud)

然后根据这个答案,我运行.astype(object)以获得我想要的格式:

>>> df=df.astype(object)
   Name Age Weight
0  Alex  20  50.65
Run Code Online (Sandbox Code Playgroud)

现在,df['Age']包含一个object, 没有尾随零:

>>> df['Age']
0    20
Name: Age, dtype: object
Run Code Online (Sandbox Code Playgroud)

这就是我想用 导出的内容to_csv,但此命令会在数字后重新附加一个尾随 0,我想避免这种情况:

>>> df_csv = df.to_csv(sep=',', index = False)
>>> df_csv
'Name,Age,Weight\nAlex,20.0,50.65\n'
Run Code Online (Sandbox Code Playgroud)

我尝试df_csv = df.to_csv(sep=',', index = False, float_format='%.0f')根据这个答案使用,但这不起作用,因为我的数据框中还有其他浮点数,我希望保留非零小数。

我怎样才能防止这个尾随 0 出现在没有小数的数字中?

小智 6

使用 Pandas 替换的另一种方法:

df = df.astype(str)
df = df.replace(to_replace = "\.0+$",value = "", regex = True)
Run Code Online (Sandbox Code Playgroud)

这样你就不需要导入任何额外的模块。

  • 实际上,要替换的字符串应该是`"\.0+$"`,以避免同时修改诸如`0.0286`之类的数字 (3认同)