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

Pandas提取分类列数字转int:代码未达预期效果求助

问题分析与解决

你的代码无法生效的核心原因是链式索引导致赋值操作未作用到原DataFrame:data[data['c'].notna()]['c']这种写法会返回原数据的副本而非视图,赋值只会修改临时副本,原DataFrame不会被更新。

解决方法一:使用.loc定位赋值(推荐)

用pandas官方推荐的.loc索引器直接定位目标行和列,确保修改作用于原数据:

import pandas as pd
import numpy as np

data = pd.DataFrame( {'c':[np.nan, 'group 001', 'group 002', '03 group']} )

# 用.loc精准定位非空行的c列,直接赋值提取后的数字
data.loc[data['c'].notna(), 'c'] = data.loc[data['c'].notna(), 'c'].str.extract('(\d+)').astype(int)

解决方法二:直接处理整列

str.extract会自动保留原列的NaN值,无需单独过滤非空行,写法更简洁:

import pandas as pd
import numpy as np

data = pd.DataFrame( {'c':[np.nan, 'group 001', 'group 002', '03 group']} )

# 提取数字并转为支持NaN的整数类型
data['c'] = data['c'].str.extract('(\d+)').astype('Int64')

这里用Int64(大写I)是pandas的可空整数类型,既能保留整数类型,又能正确处理NaN值。

执行后,data['c']的结果就是预期的[np.nan, 1, 2, 3]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:50:28