首页 > 解决方案 > Pandas - 有效地迭代 DataFrame 行并按列名获取值

问题描述

众所周知,Pandas 中的迭代效率低下,最好尽可能避免(使用 apply 进行数据操作等)。不幸的是,就我而言,这是不可避免的。

虽然众所周知,最有效的方法是itertuples,但该函数使用元组的 str 名称访问列数据会引发以下错误:

TypeError:元组索引必须是整数或切片,而不是 str

有人建议解决此问题的方法是切换到iterrows,但如前所述,这效率不高。

如何利用 itertuples,同时仍使用列的 str 名称来获取其行值?

标签: pythonpandasdataframe

解决方案


本质上,只需要使用所需列的索引即可。由于元组中的第一个值是原始数据帧中的索引,因此可以使用原始数据帧中的列索引,并添加一个来说明索引。

df = pd.DataFrame(some_data)
col_idx = df.columns.get_loc('col name') + 1  # +1 to account for the tuple Index
for row in training_df.itertuples():
        val = row[col_idx]
        print(val)

这个解决方案可能不是最优雅的选择,但它有效:)


推荐阅读