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

如何在Pandas中基于部分列名选择从Test到Bio开头列的范围?

解决Pandas中从指定列到特定前缀列的范围选择问题

可行解决方案

直接上适配你需求的代码,针对示例DataFrame:

import pandas as pd

df_chunk = pd.DataFrame({
    'Waste':[None,None],
    'Test':['something', 'something'],
    '2':[None,None],
    '3':[None,None],
    'Bio Ref':['2-50','15-100'],
    'None':[None,None]})

# 获取Test列的位置索引
test_col_pos = df_chunk.columns.get_loc('Test')
# 获取第一个以Bio开头的列的位置索引
bio_col = df_chunk.columns[df_chunk.columns.str.startswith('Bio')][0]
bio_col_pos = df_chunk.columns.get_loc(bio_col)

# 选择从Test到Bio开头列的完整范围(包含两端)
selected_df = df_chunk.iloc[:, test_col_pos : bio_col_pos + 1]
print(selected_df)

运行后输出:

Test      2       3  Bio Ref
0  something   None    None     2-50
1  something   None    None   15-100

为什么你的原代码失败

你尝试的df_chunk.loc[:, 'Test':df_chunk.columns.str.startswith('Bio')]无法运行,原因是:

  • loc的列范围语法要求两端是具体列名,或者单独使用布尔数组筛选列,但不能把列名和布尔数组混合使用。
  • df_chunk.columns.str.startswith('Bio')返回的是布尔数组,不是合法的列名,所以和'Test'组合的范围写法不被Pandas识别。

适配场景的扩展处理

针对你提到的场景特点,代码可以灵活调整:

  1. 如果有多个以Bio开头的列:
    若想选到最后一个Bio开头的列,修改获取Bio列的部分:
    bio_cols = df_chunk.columns[df_chunk.columns.str.startswith('Bio')]
    bio_col_pos = df_chunk.columns.get_loc(bio_cols[-1])
    
  2. 避免Test列在Bio列之后的异常:
    加判断防止逻辑错误:
    if test_col_pos > bio_col_pos:
        print("Test列位置在Bio列之后,无法选择有效范围")
    else:
        selected_df = df_chunk.iloc[:, test_col_pos : bio_col_pos + 1]
    
  3. 用列名列表直接选择:
    若更习惯列名操作,可先拿到目标列名称列表再选择:
    target_cols = df_chunk.columns[test_col_pos : bio_col_pos + 1]
    selected_df = df_chunk[target_cols]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:44:59