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

如何清除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)

逻辑说明

  1. 先通过split('|')拆分|分隔的大项
  2. 对每个大项执行strip(),去除首尾的换行符和空白字符
  3. 用split('\n')拆分大项内部由换行分隔的子类别
  4. 再次用strip()清理每个子类别,并过滤掉空字符串
  5. 最后将所有子类别合并成一个扁平列表,得到目标格式

内容的提问来源于stack exchange,提问作者lana mora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:36:35