熊猫将.0附加到一个数字上

时间:2015-04-01 15:39:58

标签: 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"
"SN20077","2567897.0", "28", "24687"

任何人都可以解释为什么有些但不是所有的数值都附加了.0,如果有任何方法我可以阻止它?当我使用CSV输出执行我的过程的下一步时,这是一个问题。

我试图将数据框和列本身转换为字符串,但它没有产生影响。理想情况下,我不希望列出要转换的每一列,因为它有一个非常大的列,并且手动必须通过输出文件来确定哪些是附加的.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)

2 个答案:

答案 0 :(得分:3)

pandas.DataFrame.to_csv有一个参数float_format,它接受​​一个常规的浮点格式化字符串。这应该有效:

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

答案 1 :(得分:0)

我喜欢循环。它们很慢,但很容易理解。 这对于逻辑来说是优雅的,但它也允许每列的不同格式/小数。

类似的东西:

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 )

你可以在制表或漂亮的打印机上阅读更多内容。以上是一个帮助您入门的上下文示例。

与上面的循环类似,tabulate允许使用可以是逗号的分隔符。 使用命令行实用程序https://pypi.python.org/pypi/tabulate

非常确定漂亮的打印机也可以做到这一点,并且可能是一个更好的选择。


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

from __future__ import print_function