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

如何在Pandas中对所有字符串列执行转大写与去空格操作?

解决Pandas中批量转换字符串列的问题

你的问题出在两个核心点:一是两次赋值都基于原始的string_dtypes对象,导致第二次的strip操作直接覆盖了第一次的upper结果,等于只执行了去空格;二是select_dtypes("string")仅识别Pandas专属的StringDtype列,漏掉了传统存储字符串的object类型列,且你的species是分类(Categorical)类型,也没被正确纳入处理范围。

以下是几种实用的解决方案:

方案1:批量处理所有普通字符串列(object/string类型)

直接筛选出所有字符串相关列,通过链式调用一次性完成转大写+去空格:

# 筛选所有字符串类型列(包含object和string)
str_cols = df.select_dtypes(include=['object', 'string']).columns
# 链式执行两个转换,避免覆盖
df[str_cols] = df[str_cols].apply(lambda x: x.str.upper().str.strip())

方案2:同时处理分类(Categorical)列

如果数据里有像species这样的分类列,想要统一处理分类标签,可以单独对分类列的标签进行更新:

# 遍历所有字符串类列和分类列
for col in df.columns:
    dtype = df[col].dtype
    if dtype in ['object', 'string']:
        df[col] = df[col].str.upper().str.strip()
    elif dtype == 'category':
        # 更新分类标签
        new_categories = df[col].cat.categories.str.upper().str.strip()
        df[col] = df[col].cat.rename_categories(new_categories)

修正你的原始代码

把你代码里的转换部分替换成以下内容,即可得到预期效果:

# 处理普通字符串列
string_cols = df.select_dtypes(include=['object', 'string']).columns
df[string_cols] = df[string_cols].apply(lambda x: x.str.upper().str.strip())

# 单独处理分类列species
df['species'] = df['species'].cat.rename_categories(
    lambda label: label.upper().strip()
)

运行后species列的标签会变为SETOSA、VERSICOLOR、VIRGINICA,其他字符串列也会完成转大写和去空格操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:15:44