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

