Python Pandas如何删除float类型ID列的小数点且不改变原值
Pandas Float类型ID列删除小数点保留完整数字解决方案
问题场景
使用Python Pandas处理数据时,数据框内有一列float类型的ID字段,原始数据示例如下:
ID 93.18767 93.87657 94.87246 95.87323
需求为删除ID值中的小数点,所有数字完全保留不修改,期望输出结果如下:
ID 9318767 9387657 9487246 9587323
原有实现的问题
最初的实现逻辑为将ID列转为字符串类型后直接替换小数点,自定义函数代码如下:
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
该问题的根源是float类型的底层存储机制,直接转字符串时会出现精度偏差。
最终可行方案
先确定ID列的固定小数位数,对值做格式化处理后再执行替换操作即可,代码示例:
# 可根据ID列实际小数位数调整format的参数,示例中ID为5位小数 df['ID'] = df['ID'].apply(lambda x: '{0:.5f}'.format(x)) # 调用自定义替换函数删除小数点 substitute(df, 'ID', '.', '')
内容的提问来源于stack exchange,提问作者Suetam016
相关产品推荐
相关产品推荐

