python - Pandas - 有效地迭代 DataFrame 行并按列名获取值
问题描述
众所周知,Pandas 中的迭代效率低下,最好尽可能避免(使用 apply 进行数据操作等)。不幸的是,就我而言,这是不可避免的。
虽然众所周知,最有效的方法是itertuples,但该函数使用元组的 str 名称访问列数据会引发以下错误:
TypeError:元组索引必须是整数或切片,而不是 str
有人建议解决此问题的方法是切换到iterrows,但如前所述,这效率不高。
如何利用 itertuples,同时仍使用列的 str 名称来获取其行值?
解决方案
本质上,只需要使用所需列的索引即可。由于元组中的第一个值是原始数据帧中的索引,因此可以使用原始数据帧中的列索引,并添加一个来说明索引。
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)
这个解决方案可能不是最优雅的选择,但它有效:)
推荐阅读
- python-3.x - 有没有办法可以遍历这个列表而不重复相同的数字?
- laravel - 如何在子域上部署 octobercms 项目
- c# - C# 应用程序在 docker 中出现“无法从命令行启动服务”但在主机上失败
- ios - 游戏中心无法识别应用程序
- postgresql - 如何从给定日期计算每月总计
- javascript - 删除已删除行后未进行动态行删除
- ruby-on-rails - 当 ActiveRecord 模型有另一个调用时,是否可以删除 .all?
- spring - 在 Spring Cloud 微服务中请求资源时如何修复“403 - Forbidden - Access Denied”?
- python - 从字典列表创建 DataFrame 时指定列的顺序
- r - R函数在数据框中找到对象的最佳排名?