如何解决如何在不更改值的情况下从浮点值中删除点 - 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 举报,一经查实,本站将立刻删除。