You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除DataFrame列末尾的.0?Pandas代码失效求助

解决DataFrame中CAS/ID NO列末尾.0无法移除的问题

问题根源

你写的代码里有两个关键错误导致替换失效:

  • 多余的df3['CAS'] = df3['CAS/ID NO'].to_string()这行,to_string()会把整个列转换成一个包含所有行的长字符串,直接覆盖了后续的处理逻辑
  • 使用replace时设置了regex=False,导致正则表达式\.0被当作普通字符串匹配,无法精准定位末尾的.0

修正方案

根据CAS/ID NO列的数据类型,有两种可靠的处理方式:

方式1:针对纯整数型的浮点列(所有值都是X.0)

如果该列的数值都是整数的浮点形式(比如123.0),可以先转成整数再转字符串,直接去掉.0:

import requests
import pandas as pd

url = ' https://www.accessdata.fda.gov/scripts/sda/sdNavigation.cfm?sd=edisrev&displayAll=true'
html = requests.get(url).content
df_list2 = pd.read_html(html)
df2 = df_list2[0]
df3 = df2.dropna(subset=['CAS/ID NO'])
# 先转整数再转字符串,直接去除.0
df3['CAS'] = df3['CAS/ID NO'].astype(int).astype(str)
print(df3[['CAS/ID NO', 'CAS']])

方式2:通用正则替换(兼容带小数的情况)

如果列中存在非整数的浮点值(比如123.45),只想去掉末尾的.0、保留其他小数部分,用正则匹配末尾的.0并替换:

import requests
import pandas as pd

url = ' https://www.accessdata.fda.gov/scripts/sda/sdNavigation.cfm?sd=edisrev&displayAll=true'
html = requests.get(url).content
df_list2 = pd.read_html(html)
df2 = df_list2[0]
df3 = df2.dropna(subset=['CAS/ID NO'])
# 正则匹配末尾的.0并替换为空,启用regex=True
df3['CAS'] = df3['CAS/ID NO'].astype(str).replace(r'\.0$', '', regex=True)
print(df3[['CAS/ID NO', 'CAS']])

关键说明

  • 必须删除df3['CAS'] = df3['CAS/ID NO'].to_string()这行,否则整列会被转成一个大字符串,后续处理完全失效
  • 正则替换时要用r'\.0$',$确保只匹配字符串末尾的.0,同时设置regex=True让正则规则生效

内容的提问来源于stack exchange,提问作者tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:48:31