我有一个带有对象列的数据框,比如col1,其值类似于: 1.00, 1, 0.50, 1.54
我想要类似以下的输出: 1, 1, 0.5, 1.54 基本上,如果小数点后没有任何数字,则除去小数点后的零。请注意,我需要回答数据框。 pd.set_option和round对我不起作用。
答案 0 :(得分:0)
一种快捷方法是使用"%g" % value
,它将浮点数1.5
转换为1.5
,但将1.0
转换为1
,依此类推。负面影响是大量数字将以4.44e+07
之类的科学符号表示。
答案 1 :(得分:0)
取自this Stackoverflow answer,我想您想像这样更改熊猫的显示精度:
pd.set_option('precision', 0)
答案 2 :(得分:0)
我认为类似的方法应该起作用:
if val.is_integer() == True :
val = int(val)
elif val.is_float() == True :
val = Decimal(val).normalize()
假设val
是数据框的列内的float
值。您只需将值转换为整数即可。
对于浮点值,则切掉额外的零。
答案 3 :(得分:0)
str.rstrip
方法如何。像这样(假设您的字符串在列表中):
a = ["1.00", "1" ,"0.50", "1.50"]
b = [e.rstrip('.0') for e in a]
>>> ['1', '1', '0.5', '1.5']
答案 4 :(得分:0)
如果要转换整数并将数字浮点数转换为无尾随0
的字符串,请使用this和map
或apply
:
df = pd.DataFrame({'col1':[1.00, 1, 0.5, 1.50]})
df['new'] = df['col1'].map('{0:g}'.format)
#alternative solution
#df['new'] = df['col1'].apply('{0:g}'.format)
print (df)
col1 new
0 1.0 1
1 1.0 1
2 0.5 0.5
3 1.5 1.5
print (df['new'].apply(type))
0 <class 'str'>
1 <class 'str'>
2 <class 'str'>
3 <class 'str'>
Name: new, dtype: object