如何清除DataFrame genres列换行符并拆分出独立genre项
处理Abjjad数据集Genres列格式问题
我正在清洗从Abjjad爬取的数据集,包含book_title、author、Cover_url、genres、descriptions五列。其中genres列的原始格式为:
روايات وقصص روايات اجتماعية | روايات وقصص روايات واقعية |
我最初用这段代码处理:
df = pd.read_csv("/data/abjjad.csv",converters={'genres': lambda x: x[1:-1].split('|')})
得到的结果是:
['روايات وقصص\nروايات اجتماعية\n', '\nروايات وقصص\nروايات واقعية\n']
但期望的输出是:
['روايات وقصص' ,'روايات اجتماعية','روايات وقصص', 'روايات واقعية']
解决方案
方法一:读取时直接处理
自定义清理函数,在读取CSV时就完成格式转换:
def clean_genres(x): # 按|分割原始字符串 split_items = x[1:-1].split('|') cleaned_genres = [] for item in split_items: # 去掉首尾空白和换行,再按换行拆分内部项 sub_genres = [s.strip() for s in item.strip().split('\n') if s.strip()] cleaned_genres.extend(sub_genres) return cleaned_genres df = pd.read_csv("/data/abjjad.csv", converters={'genres': clean_genres})
方法二:读取后批量处理
如果已经完成数据读取,用apply批量处理genres列:
def clean_genres_list(genre_list): cleaned = [] for item in genre_list: sub_items = [s.strip() for s in item.strip().split('\n') if s.strip()] cleaned.extend(sub_items) return cleaned df['genres'] = df['genres'].apply(clean_genres_list)
逻辑说明
- 先通过
split('|')拆分|分隔的大项 - 对每个大项执行
strip(),去除首尾的换行符和空白字符 - 用
split('\n')拆分大项内部由换行分隔的子类别 - 再次用
strip()清理每个子类别,并过滤掉空字符串 - 最后将所有子类别合并成一个扁平列表,得到目标格式
内容的提问来源于stack exchange,提问作者lana mora
相关产品推荐
相关产品推荐

