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

如何在Pandas方法链中正确使用str.contains与str.split?

Pandas方法链优化:过滤行与拆分多列实现

完整可运行的链式代码

# 爬取的原始周度数据
raw_list = ['Unnamed: 0','Preseason-Aug 11','Week 1-Aug 26','Week 2-Sep 2',
       'Week 3-Sep 9','Week 4-Sep 23','Week 5-Sep 30','eek 6-Oct 7','Week 7-Oct 14',
       'Week 8-Oct 21','Week 9-Oct 28','Week 10-Nov 4','Week 11-Nov 11','Week 12-Nov 18',
       'Week 13-Nov 25','Week 14Dec 2','Week 15-Dec 9','Week 16 (Final)-Jan 4','Unnamed: 18']

# 链式调用完成数据清洗
clean_df = (pd.DataFrame(raw_list)
            .rename(columns={0: "text"})
            # 过滤含"Unnamed"的行
            .query("~text.str.contains('Unnamed')", engine='python')
            # 拆分text列为week和released两列
            .assign(**lambda df_: df_["text"].str.split('-', expand=True)
                    .rename(columns={0: 'week', 1: 'released'}))
           )

关键问题解决说明

  1. 替代pipe+自定义函数的过滤方式
    不需要额外定义过滤函数,直接用query方法就能在链式中完成行过滤:

    • 指定engine='python'是因为默认的pandas查询引擎不支持str.contains这类字符串方法
    • 也可以用loc链式写法,效果完全一致:
      .loc[lambda df_: ~df_['text'].str.contains('Unnamed')]
      
  2. 链式中实现str.split生成多列
    用assign结合匿名函数+字典解包(**)的方式,把拆分后的DataFrame转换成键值对传入assign,直接生成目标列:

    • str.split(expand=True)返回的是一个多列DataFrame,先通过rename把默认列名改为week和released
    • 字典解包**会把重命名后的列名和对应数据作为参数传给assign,实现多列新增
    • 如果偏好更直观的写法,也可以用join替代assign:
      .join(lambda df_: df_["text"].str.split('-', expand=True)
            .rename(columns={0: 'week', 1: 'released'}))
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:15:29