微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不更改值的情况下从浮点值中删除点 - Python Pandas

如何解决如何在不更改值的情况下从浮点值中删除点 - Python Pandas

所以我的 df 中有一个 ID 列是这样的:

ID
93.18767
93.87657
94.87246
95.87323

我必须去掉点,让所有数字保持原样,就像这样:

ID
9318767
9387657
9487246
9587323

我尝试使用替换,但是当我将此列转换为字符串时,我得到了一些奇怪的值。这是我通常使用的方法

def substitute (df,column,before,after):
    df[column]=df[column].astype(str)
    df[column]=df[column].str.replace(before,after)
    return 'Done'   

但是当我使用那个方法时,我得到了这样的结果:

 ID
931876599999994
938764388899999994
948724388555599999
9587322999994300000002

我知道当我尝试将列转换为字符串时会发生这种情况,这是因为浮点数的存储方式,但我找不到解决方案。

提前致谢!

解决办法: 我需要确定我的列中的小数位数,然后使用替换

df[ID] = df[ID].apply(lambda x: '{0:.4f}'.format(x))
substitute (df,'ID',after)

解决方法

您可以转换为字符串,删除点并再次转换为整数:

s = pd.Series([93.18767,93.87657,94.87246,95.87323],name='ID')
s.astype(str).str.replace('.','').astype(int)

输出:

0    9318767
1    9387657
2    9487246
3    9587323

或者,如果您的数据始终采用 xx.xxxxx 形式,您可以乘以 10 的必要幂以达到整数(此处为 1e5):

(s*1e5).astype(int)
,

简单地说,你可以试试下面的 str.replace + astype

数据帧示例:

>>> df
         ID
0  93.18767
1  93.87657
2  94.87246
3  95.87323

方法一:如果您打算简单地从 . 值中删除 float 而不是在删除点后将它们作为 float 使用,请在下面使用。

>>> df['ID'].astype(str).str.replace(".","")
0    9318767
1    9387657
2    9487246
3    9587323
Name: ID,dtype: object

第二,从数字中删除dots,然后再次将其转换为类型int,即字面上的int64

>>> df['ID'].astype(str).str.replace(".","").astype("int")
0    9318767
1    9387657
2    9487246
3    9587323
Name: ID,dtype: int64

另一个,从数字中删除 dots 然后再次将其转换为类型 float 即字面上的 float64 但你会得到最后虽然是数字。

>>> df['ID'].astype(str).str.replace(".","").astype("float64")
0    9318767.0
1    9387657.0
2    9487246.0
3    9587323.0
Name: ID,dtype: float64

另一个技巧: 因为 \D 匹配任何 non-decimal digit

>>> df['ID'].astype(str).str.replace(r'\D+','')
0    9318767
1    9387657
2    9487246
3    9587323
Name: ID,dtype: object

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。