为何在Pandas中使用for循环遍历DataFrame.iterrows()时需要指定index, row?
为什么使用
iterrows()时必须添加index参数? 嘿,这个问题我当初刚用Pandas的时候也踩过坑!其实核心原因是得搞明白iterrows()这个方法到底返回什么内容:
data.iterrows()每次迭代时,返回的并不是单独的一行数据,而是一个包含两个元素的元组:- 第一个元素是当前行的索引值(可以是整数、字符串等,取决于你的DataFrame索引类型)
- 第二个元素才是对应行的
pandas.Series对象,也就是你原本想要操作的行数据
你之前写的for row in data.iterrows(),这里的row其实是整个元组。当你尝试用row["column_title_1"]去取列值时,相当于给元组传了字符串索引,但元组只能用整数或切片当索引,所以才会抛出TypeError: tuple indices must be integers or slices, not str的错误。
而for index, row in data.iterrows()这种写法,用到了Python的元组解包特性:它把迭代返回的元组拆成了两个变量,index接收索引值,row接收对应的Series行对象。这时候row["column_title_1"]就完全正常了,因为Series对象支持用列名作为索引来取值。
如果你的业务逻辑里确实不需要用到索引,也可以用下划线_来占位(这是Python里表示“不需要的变量”的惯例写法),比如:
import pandas data = pandas.read_csv("data.csv") for _, row in data.iterrows(): print(row["column_title"])
这样既符合语法规范,也能清晰表达你不需要索引变量的意图~
内容的提问来源于stack exchange,提问作者Estella
相关产品推荐
相关产品推荐

