如何从字符串中删除十进制后的零

时间:2018-10-19 09:04:38

标签: python pandas

我有一个带有对象列的数据框,比如col1,其值类似于: 1.00, 1, 0.50, 1.54

我想要类似以下的输出: 1, 1, 0.5, 1.54 基本上,如果小数点后没有任何数字,则除去小数点后的零。请注意,我需要回答数据框。 pd.set_option和round对我不起作用。

5 个答案:

答案 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的字符串,请使用thismapapply

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