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
相关产品推荐
相关产品推荐

