如何移除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
相关产品推荐
相关产品推荐

