我编写了一个脚本,它将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。
感谢。
答案 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位数),则会遇到问题,因为它们将被渲染为指数。