Python循环中如何用索引x动态读取Pandas DataFrame列数据
问题排查
你写的循环有两个明显问题:
- 列名是固定写死的字符串,没有把循环变量
x拼接到列名里,每次循环取的都是同一列,完全没用到循环变量 - 循环上限用了
len(df),这个API返回的是DataFrame的行数,不是空间频率相关列的数量,会直接导致循环次数不对,要么取不全列,要么循环到后面报找不到列的错误。
实现方案
方案1:修正后的循环写法
如果你坚持用循环实现,只要正确拼接列名、匹配循环范围即可:
spatial_frequency = [] # 把n替换成你实际的空间频率相关列的总数量,比如总共有8列就写range(1,9) for x in range(1, n+1): # 用f-string把循环变量x拼接到列名后缀里 target_col = f"Spatial Frequency [lp/mm].{x}" spatial_frequency.append(df[target_col].values)
方案2:更推荐的无循环写法(不易出错)
不需要手动拼列名、数循环次数,直接用pandas的列名筛选能力一次性提取所有目标列,代码更简洁也不会出拼接错误:
# 自动匹配所有以"Spatial Frequency [lp/mm]"开头的列,不管后缀是什么 target_cols = df.columns.str.startswith("Spatial Frequency [lp/mm]") spatial_frequency = df.loc[:, target_cols].values.T.tolist()
如果你不需要转成嵌套列表格式,直接用
df.loc[:, target_cols]就能拿到所有空间频率列的DataFrame,后续做计算处理会更方便。
内容的提问来源于stack exchange,提问作者scrub
相关产品推荐
相关产品推荐

