Pandas将int值转换为在数据帧中浮动

时间:2017-02-20 12:30:25

标签: python csv pandas dataframe floating-point

我编写了一个脚本,它将csv文件作为输入,使用pandas处理数据并创建另一个csv文件。

一切正常,但是pandas默认将整数值转换为double。 e.g。

之前的csv:

5f684ee8-7398-914d-9d87-7b44c37ef081,France,44,72000,No,isBool("true")

在csv之后:

E84E685F-9873-4D91-9D87-7B44C37EF081,France,44.0,72000.0,No,True

此处44和72000更改为44.0和72000.0

我知道如何在数据帧中使用apply()将它们转换为int,但是这个脚本将是通用的,我希望首先配置pandas。

基本上,如果不是浮动数字,我希望大熊猫不要放.0。

感谢。

2 个答案:

答案 0 :(得分:1)

正如评论中所说,pandas中的一些操作可以改变dtypes。请参阅例如this page

解决方案可以是:

df.to_csv(float_format="%.0f")

将每个(false)float舍入为整数格式。

一个例子:

In [355]: pd.DataFrame(columns=list(range(6)), 
data=[['E84E685F-9873-4D91-9D87-7B44C37EF081', 'France', 44.0, 72000, 'No', True]]
).to_csv(float_format='%.f')
Out[355]: ',0,1,2,3,4,5\n0,E84E685F-9873-4D91-9D87-7B44C37EF081,France,44,72000,No,True\n'

答案 1 :(得分:1)

与B. M.的答案类似,您可以解析您的花车,如下所示:

df.to_csv(float_format="%.10g")

如果数字的精度最多为10位,则会强制编写无指数的数字。所以2,147,483,647将呈现为2147483647而10 -2 将呈现为0.01。如果您有大整数(大于10位数),则会遇到问题,因为它们将被渲染为指数。