批量处理DataFrame列时遇AttributeError:'DataFrame'无'str'属性
解决DataFrame批量移除所有列冒号前文本的问题
问题原因
str是Pandas Series的专属属性,DataFrame对象没有这个方法,所以直接在多列或整个DataFrame上调用.str.split会报错。
可行解决方案
方法1:用apply遍历所有列
直接复用你单列的处理逻辑,批量作用到所有列:
import pandas as pd # 假设你的DataFrame名为df df = df.apply(lambda col: col.str.split(':').str[-1].str.strip())
apply会自动将每一列(Series类型)传入lambda函数,依次执行拆分、取最后一段、去除前后空格的操作,一次性完成所有列的处理。
方法2:正则表达式批量替换
用正则直接匹配并移除冒号及之前的所有内容,代码更简洁高效:
df = df.replace(r'^.*:', '', regex=True).apply(lambda col: col.str.strip())
r'^.*:'是正则规则:^匹配字符串开头,.*贪婪匹配任意字符直到最后一个冒号,:匹配冒号本身replace会把所有匹配到的内容替换为空,最后统一去除每列值的前后空格
注意事项
如果DataFrame包含非字符串类型的列,先统一转为字符串类型再处理,避免报错:
# 先转字符串类型,再执行处理 df = df.astype(str).apply(lambda col: col.str.split(':').str[-1].str.strip())
内容的提问来源于stack exchange,提问作者MGs
相关产品推荐
相关产品推荐

