Pandas分割字符串后元素带无法去除的前置空格问题咨询
问题根因
- 第一次拆分时仅用逗号
,作为分隔符:原始字符串的格式是分类1, 分类2, 分类3,逗号后自带一个空格,因此分割后除第一个元素外,其余元素开头都会携带前导空格。 - 后续去空格逻辑完全失效:
genres_1列存储的是列表类型的数据,你调用.astype('str')是把整个列表转成了字符串格式(比如"['drama', ' comedy', ' action']"),此时对整串执行strip()仅能去掉整段字符串首尾的空格,根本无法处理列表内部每个元素的前导空格,自然看不到效果。 - 额外笔误:最初的拆分代码里写的
genre['genres_1']=genres_1存在变量名错误,genre、genres_1都是未定义的变量,正确的对象应该是存储数据的booksDataFrame,拆分得到的列表变量名是Genre。
可直接运行的解决方法
方法1:pandas原生写法(最推荐,无需手写循环)
直接用pandas字符串方法的split功能,用正则匹配「逗号+任意数量空白字符」作为分隔符,一步完成拆分+去空格:
import pandas as pd # 构造样例数据 books = pd.DataFrame() books['genre'] = ['drama, comedy, action', 'romance, sci-fi, drama','horror'] # 一步拆分并自动去除分类前后的多余空格 books['genres_clean'] = books['genre'].str.split(r',\s*')
运行后genres_clean列的结果完全符合预期:
- 第一行值:
['drama', 'comedy', 'action'] - 第二行值:
['romance', 'sci-fi', 'drama'] - 第三行值:
['horror']
方法2:修正原有循环逻辑
如果想保留手写循环的写法,要么拆分时直接把「逗号+空格」作为分隔符,要么拆分后遍历列表内的每个元素单独去空格,不要把整个列表转成字符串处理:
# 写法A:拆分时直接匹配逗号+空格的格式 Genre = [] for genre_type in books['genre'].astype('str'): Genre.append(genre_type.split(', ')) books['genres_1'] = Genre
# 写法B:拆分后逐个处理列表内的分类名,去除首尾空格 Genre_clean = [] for genre_list in Genre: clean_single_row = [g.strip() for g in genre_list] Genre_clean.append(clean_single_row) books['genres_clean'] = Genre_clean
内容的提问来源于stack exchange,提问作者Rebecca James
相关产品推荐
相关产品推荐

