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

无需硬编码从Pandas DataFrame提取列子集的方法

如何无需硬编码提取Pandas DataFrame的列子集?

当然有办法啦!不用硬编码列名就能轻松提取1990及以后的列,我给你几个实用的方案,完全适配你给出的df.columns.values结构:

方案1:利用列名的类型筛选

你的年份列是整数类型,而str_ID、num_ID是字符串类型,刚好可以通过类型判断来筛选:

# 先筛选出所有整数类型的列(也就是年份列)
year_cols = [col for col in df.columns if isinstance(col, int)]
# 提取年份列的子集
df_year_subset = df[year_cols]

# 如果需要同时保留ID列和年份列,直接把ID列加进去就行
df_full_subset = df[['str_ID', 'num_ID'] + year_cols]

方案2:基于列的位置切片

既然年份列都排在ID列之后(从第3列开始,索引为2),直接用切片就能快速拿到:

# 提取从索引2开始到最后的所有列(也就是1990及以后的年份列)
df_year_subset = df.iloc[:, 2:]

# 要是需要保留ID列+年份列,其实就是整个DataFrame啦,不过如果后续列顺序不变,这个方法最简洁

方案3:通过列名的数值大小筛选(通用型)

如果以后年份列可能变成字符串类型(比如'1990'),或者列顺序有变动,这个方法更通用:

# 遍历列名,判断是否为可转换为数字且≥1990的列
year_cols = [col for col in df.columns if str(col).isdigit() and int(col) >= 1990]
df_year_subset = df[year_cols]

这个写法用列表推导式简化了判断,不管列名是整数还是数字字符串,都能准确筛选出1990及以后的年份列。

这些方法都不用硬编码具体的年份列名,哪怕以后新增了1996、1997这类列,代码也能自动适配,不用修改~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:45:06