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

如何移除pandas DataFrame列字符串首尾空格避免get_dummies生成重复列

问题根源

你写的strip_string函数存在两个核心问题,导致空格清理完全没生效:

  • 循环里仅把strip()处理后的结果赋值给了临时变量a,从来没有把处理后的值写回原DataFrame的对应位置,原列数据根本没被修改
  • 就算你把值写回了,strip()只会处理整个单元格字符串的首尾空格,没法清理逗号分隔符前后的内部空格(比如df, gh里逗号后面跟的空格),最终get_dummies()会把 gh和gh识别成两个不同的分类,才会出现重复列。
可行解决方案

pandas自带的字符串向量化方法不需要写逐行循环,就能高效完成空格清理,处理后再做独热编码就不会出现重复列。

方法1:拆分-清理-拼接(逻辑直观易读)

先按逗号拆分每个单元格的字符串,给拆分出来的每一个分类项单独去掉首尾空格,再重新用逗号拼接成完整字符串,之后再做独热编码:

import pandas as pd

# 初始化DataFrame(注意原代码里df是字典,需要转成pandas的DataFrame结构才能调用后续方法)
df = pd.DataFrame({
    'c1': [' ab', 'fg', 'ac ', 'hj-jk ', ' ac', 'df, gh', 'gh', 'ab', 'ad', 'jk-pl', 'ae', 'kl-kl '], 
    'b2': ['ba', 'bc', 'bd', 'be', 'be', 'be', 'ba', 'bc', 'bd', 'be', 'ba', 'bc']
})

# 清理c1列所有分类项的首尾空格
df['c1'] = df['c1'].str.split(',').apply(lambda item_list: [single_item.strip() for single_item in item_list]).str.join(',')

# 生成独热编码
df1 = df['c1'].str.get_dummies(',')

方法2:正则替换(代码更简洁,运行效率更高)

直接用正则匹配逗号前后所有空白字符替换成纯逗号,再处理整个字符串首尾的空格,一步完成清理:

# 正则替换逗号前后的空白,同时清理字符串首尾空格
df['c1'] = df['c1'].str.replace(r'\s*,\s*', ',', regex=True).str.strip()
df1 = df['c1'].str.get_dummies(',')

两种方法处理后,原本带空格的同名分类会被统一(比如 ab、ab统一为ab,ac 、 ac统一为ac, gh和gh统一为gh),最终生成的独热编码不会再出现重复列。

内容的提问来源于stack exchange,提问作者Natália Resende

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:57:37