如何处理DataFrame中含数字与文本的列:提取数字并计算均值?
解决思路与代码实现
核心逻辑
先提取每行中的所有数字,再根据数字数量分别处理:
- 提取到2个数字:计算区间平均值
- 提取到1个数字:直接返回该数字
具体步骤
- 导入依赖库
import pandas as pd import re
- 构造示例DataFrame(替换为你的实际数据即可)
df = pd.DataFrame({ 'people': [ '200 to 500 people', '1 to 5 people', '5000 people and over', '2000 to 3000 people' ] })
- 定义转换函数
def convert_to_number(text): # 提取所有数字并转为整数列表 nums = list(map(int, re.findall(r'\d+', text))) # 分情况处理 if len(nums) == 2: return sum(nums) / 2 # 若需要整数结果,可改为 int(sum(nums)/2) elif len(nums) == 1: return nums[0] # 无数字的极端情况可返回NaN或自定义值 return None
- 应用函数到目标列
df['result'] = df['people'].apply(convert_to_number)
运行结果
处理后df['result']的输出为:
0 350.0 1 3.0 2 5000.0 3 2500.0 Name: result, dtype: float64
如果使用int(sum(nums)/2),结果会是整数类型,完全匹配你的预期输出。
内容的提问来源于stack exchange,提问作者pymn
相关产品推荐
相关产品推荐

