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

如何在Pandas的Budget列中移除非数值?现有方案失效求解答

问题分析与解决方案

原方案存在的问题

1. 正则替换方案的问题

你用的movies['Budget']=movies['Budget'].str.replace(r'^[a-zA-Z]+$','')有两个核心问题:

  • 正则表达式^[a-zA-Z]+$仅匹配完全由字母构成的整段内容,如果单元格里是字母+数字/特殊符号的混合内容,不会被替换;
  • 替换后单元格仍是字符串类型,没有转为数值,后续无法直接进行预算相关的数值计算。

2. 自定义函数的问题

你的自定义函数有一个关键错误:
Python的字符串是不可变对象,row.replace(i,'')会返回一个新的字符串,但你没有将这个新字符串赋值回row,所以循环里的替换操作完全没生效,最后返回的还是原字符串。此外,逐个遍历字符的方式效率极低,没必要这么做。


有效解决方法

根据你的需求,这里提供几种更简洁高效的处理方式:

方法1:只保留数值内容,转为数值类型

直接用正则替换所有字母字符,再转换为数值(无法转换的内容设为NaN,方便后续缺失值处理):

import pandas as pd

# 替换所有字母为空,再转为数值,无效内容设为NaN
movies['Budget'] = pd.to_numeric(
    movies['Budget'].str.replace(r'[a-zA-Z]', '', regex=True),
    errors='coerce'
)

方法2:先处理货币符号/千分位,再清理字母

如果你的预算列包含$或逗号(比如$1,200,000),可以先清理这些符号,再处理字母:

movies['Budget'] = pd.to_numeric(
    movies['Budget'].str.replace(r'[$,]', '', regex=True)  # 去掉美元符号和逗号
                   .str.replace(r'[a-zA-Z]', '', regex=True),  # 去掉所有字母
    errors='coerce'
)

方法3:仅清除全字母的无效内容

如果你只想清除像Released、Language这种完全由字母组成的无效值,保留其他混合内容(比如123abc会保留123),可以这样写:

# 先替换全字母内容为空,再转为数值
movies['Budget'] = pd.to_numeric(
    movies['Budget'].str.replace(r'^[a-zA-Z]+$', '', regex=True),
    errors='coerce'
)

内容的提问来源于stack exchange,提问作者23 Akshayavanan. T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:33:31