如何在Python DataFrame中批量去除多列特殊字符?iloc多列处理失效求助
解决DataFrame多列去除特殊字符失效的问题
问题核心原因
用df.iloc[:,1:10].str.strip('%')处理多列失效,主要有两个关键因素:
- 目标列数据类型非字符串/object类型:
str.strip()仅对字符串类型生效,若列是数值型,直接调用会返回NaN,赋值后看起来无变化。 - 链式赋值的潜在风险:
df.iloc[:,1:10] = df.iloc[:,1:10].str.strip('%')属于链式索引操作,可能触发pandas的SettingWithCopyWarning,导致修改未同步到原DataFrame。
针对性解决方案
1. 先确认并转换列类型
先检查目标列的数据类型:
print(df.iloc[:,1:10].dtypes)
如果是数值型,先转字符串处理,再按需转回数值类型:
# 转换为字符串→去除%→转回浮点型(可根据需求调整为int等类型) df.iloc[:,1:10] = df.iloc[:,1:10].astype(str).str.strip('%').astype(float)
2. 用applymap处理混合类型列
如果列中混合了字符串和数值,用applymap做类型判断,避免数值被转成NaN:
df.iloc[:,1:10] = df.iloc[:,1:10].applymap(lambda x: x.strip('%') if isinstance(x, str) else x)
3. 避免链式赋值,直接用列名索引
先提取目标列名,再直接赋值,操作更稳妥:
target_cols = df.columns[1:10] df[target_cols] = df[target_cols].str.strip('%')
内容的提问来源于stack exchange,提问作者Stickle
相关产品推荐
相关产品推荐

