Python 将.0追加到数字的熊猫

Python 将.0追加到数字的熊猫,python,csv,pandas,Python,Csv,Pandas,我对熊猫有点困惑。我有一个文件,里面有很多不需要计算的数值。大多数都很好,但我有一对在结尾处附加了“.0” 以下是一个示例输入文件: Id1 Id2 Age Id3 "SN19602","1013743", "24", "23523" "SN20077","2567897", "28", "24687" 以及正在生成的输出: Id1 Id2 Age Id3 "SN19602","1013743.0", "24", "23523

我对熊猫有点困惑。我有一个文件,里面有很多不需要计算的数值。大多数都很好,但我有一对在结尾处附加了“.0”

以下是一个示例输入文件:

Id1         Id2      Age     Id3
"SN19602","1013743", "24", "23523"
"SN20077","2567897", "28", "24687"
以及正在生成的输出:

Id1         Id2      Age     Id3
"SN19602","1013743.0", "24", "23523"
"SN20077","2567897.0", "28", "24687"
有人能解释为什么一些但不是所有的数值都附加了.0,如果有什么方法我可以阻止它?当我使用CSV输出执行流程的下一步时,这是一个问题

我曾尝试将数据帧和列本身转换为字符串,但没有产生影响。理想情况下,我不想列出要转换的每一列,因为a有非常多的列,必须手动查看输出文件,以确定哪些列追加了.0并为其编写了代码。如有任何建议,我们将不胜感激

import pandas as pd
import csv

df_inputFile = pd.read_csv("InputFile.csv")
df_mappingFile = pd.read_csv("MappingFile.csv")
df_merged = df_inputFile.merge(df_mappingFile, left_on="Id", right_on="Id", how="left")
#This isn't affecting the output
df_merged.astype(str)
df_merged.to_csv("Output.csv", index=False, quoting=csv.QUOTE_ALL)
具有参数
float\u format
,该参数采用常规的浮点格式字符串。这应该起作用:

df_merged.to_csv("Output.csv", index=False, quoting=csv.QUOTE_ALL, float_format='%.0f')

我喜欢圈。它们很慢,但很容易理解。 这在逻辑上很优雅,但也允许每列使用不同的格式/小数

比如:

final_out = open("Output.txt", 'w')

for index, row in df.iterrows():
    print ( '{:.0f}'.format(row['A']), '{:.0f}'.format(row['B']),  '{:.0f}'.format(row['C']), , sep=",", file=final_out )

我认为最好/更快的方法是使用制表或漂亮的打印机

首先将数据帧转换为数组,这很容易

array = df.values
然后你可以使用一些简洁的东西,比如制表

final_out = open("Output.txt", 'w')
from tabulate import tabulate as tb
print ( tb(array, numalign="right", floatfmt=".0f"), file=final_out )
你们可以在表格或漂亮的打印机上多读一点。上面是一个上下文示例,可以帮助您开始

与上面的循环类似,tablate允许使用逗号分隔符。 在使用命令行实用程序时

相当肯定,漂亮的打印机也可以做到这一点,可能是一个更好的选择


这两种方法都使用新的python打印。如果您使用python 2.7,您将需要这个漂亮的小语句作为脚本中的第一行非注释行:

from __future__ import print_function

您是否缺少任何值?如果是这样,那么该列的数据类型现在可能是一个float64,以处理
NaN
值,请从
df.info()
输出您还可以测试该列的null
np.any(df['Id2'].isnull())
Hi@EdChum-是的,我确实有NaN值,这是一个有效的场景。。。这些应该保持不变。谢谢你,谢谢你。如果还有其他一些字段确实需要精确性,我很犹豫是否要对所有字段进行全面说明。不过,它现在正在为这个特定的用例工作。