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

Python/Pandas中如何用通配符泛型变量名选择相似列?

在Pandas中实现类似Stata的通配符列选择(比如Week_*)

当然可以实现,Pandas里有几种实用方法来完成Stata中Week_*这种通配符匹配列名的操作,下面结合你的示例代码给出具体实现:

方法1:用filter(like=...)快速匹配

这是最直接对应Stata通配符的方法,专门用来筛选包含指定字符串的列:

# 先筛选所有以"Week_"开头的列,转成列表
week_cols = dt_temp1.filter(like='Week_').columns.tolist()

# 合并固定特征列和匹配到的周列
feat_cols = ['lag2_tfk_total','lag3_tfk_total','lag2_Trips_pp','lag3_Trips_pp',
             'ClinicID_fac'] + week_cols

# 提取训练集特征
x_train = dt_temp1.loc[dt_temp1['train'] == 1, feat_cols]

方法2:字符串前缀匹配(str.startswith)

通过列名的字符串方法手动筛选,灵活性更强:

# 遍历所有列名,筛选以"Week_"开头的列
week_cols = [col for col in dt_temp1.columns if col.startswith('Week_')]

# 合并列列表
feat_cols = ['lag2_tfk_total','lag3_tfk_total','lag2_Trips_pp','lag3_Trips_pp',
             'ClinicID_fac'] + week_cols

x_train = dt_temp1.loc[dt_temp1['train'] == 1, feat_cols]

方法3:正则表达式匹配(filter(regex=...))

如果需要更复杂的匹配规则(比如匹配特定模式的列名),可以用正则表达式:

# 用正则匹配以"Week_"开头的列(^表示字符串开头)
week_cols = dt_temp1.filter(regex='^Week_').columns.tolist()

# 合并列列表
feat_cols = ['lag2_tfk_total','lag3_tfk_total','lag2_Trips_pp','lag3_Trips_pp',
             'ClinicID_fac'] + week_cols

x_train = dt_temp1.loc[dt_temp1['train'] == 1, feat_cols]

注意:你原代码里直接把'Week_*'放进feat_cols是无效的,Pandas不会自动识别这种通配符,必须先把匹配到的列名提取出来再合并到特征列表里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:01:46