将decimal转换为字符串python

时间:2016-10-05 13:48:55

标签: python pandas decimal tostring

我导入制表符分隔文件以创建具有以下df的数据框(label):

label
1
2

3

1

这是存储为pandas.core.series.Series,我想将其转换为字符串格式,以便在将其写入文本文件时可以删除小数。

df.class_label=df.label.fillna('')
df.to_string(columns=['label'],index=False)

变量类型仍然是Series,输出(文本文件)也有小数:

1.0 2.0  3.0  1.0

如何摆脱这些小数?

3 个答案:

答案 0 :(得分:1)

您可以使用float_format方法的to_string()关键字参数:

df.to_string(columns=['label'], index=False, float_format=lambda x: '{:d}'.format(x))

答案 1 :(得分:1)

使用astype(int)会将float更改为int,并会根据需要删除.0

import pandas as pd
df = pd.DataFrame({'label': [1.0, 2.0, 4.0, 1.0]})
print(df)

    label
0   1.0
1   2.0
2   4.0
3   1.0

df.label = df.label.astype(int)
print(df)

    label
0   1
1   2
2   4
3   1

这里我们不需要将其转换为字符串。这将在导出到.csv.txt时完成,并将保留int

答案 2 :(得分:1)

我认为您有一些NaN个值,因此int会转换为float,因为na type promotions

因此,您可以将label列中的数据作为str读取,然后效果很好:

import pandas as pd
import numpy as np
import io

temp=u"""lab1;label
5;1
5;2
7;
7;3
"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp), sep=';', dtype={'label':str})
print (df)
  lab1 label
0    5     1
1    5     2
2    7   NaN
3    7     3

df['class_label'] = df.label.fillna('')
print (df)
  lab1 label class_label
0    5     1           1
1    5     2           2
2    7   NaN            
3    7     3           3

print (df.to_string(columns=['class_label'],index=False))
class_label
         1
         2

         3