我导入制表符分隔文件以创建具有以下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
如何摆脱这些小数?
答案 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