从pandas中的浮点数中删除尾随小数点

时间:2017-08-25 12:43:42

标签: python pandas datagram

我的数据集中的所有列似乎都是浮点数。 有些包含像'20这样的值。 '或'11。 '

如何有选择地快速删除点和空格,而不会影响列中的其他值,例如'24 .4'或'12 .5'?

我尝试了几种解决方案,但没有一种方法有效。

我的目标是改变,例如'12。 '到'12',每个单元格中的每个值'。 '出现。

3 个答案:

答案 0 :(得分:1)

您可以为pandas设置自定义浮动格式化功能,例如:

>>> import pandas as pd
>>> df = pd.DataFrame({'col1':[1, 2, 3], 'col2':[2.0, 1.0, 4.1]})
>>> pd.set_option('display.float_format', lambda x: ('%f' % x).rstrip('.0'))
>>> df
   col1  col2
0     1     2
1     2     1
2     3   4.1

答案 1 :(得分:0)

您可以使用正则表达式替换ie

df.replace('\.(?!\d)','',regex=True) 

如果你有像这样的数据框。

df = pd.DataFrame(['12.','13.','14.1','15.5'])
df.replace('\.(?!\d)','',regex=True) # inplace = True if you want to change main dataframe.
      0
0  12  
1  13  
2  14.1
3  15.5

答案 2 :(得分:0)

如果您的列包含字符串:

>>> a
   0     1
0  1  12. 
1  2  14.5
2  3  15. 
3  4  16.3
>>> a[1]=[i.replace('. ', '') for i in a[1]]
>>> a
   0     1
0  1    12
1  2  14.5
2  3    15
3  4  16.3

如果有浮点数,你可以创建一个混合类型(int和float)的新列表:

>>> b=[int(i) if i.is_integer() else float(i) for i in a[1]]
>>> b
[12, 14.5, 15, 16.3]

但您无法在数据框中执行此操作:

>>> a[1]=[int(i) if i.is_integer() else float(i) for i in a[1]]
>>> a
     0     1
0  1.0  12.0
1  2.0  14.5
2  3.0  15.0
3  4.0  16.3