iterrows()
是pandas
中DataFrame
对象的一个方法,主要用于逐行遍历DataFrame
。
一、功能介绍
它会生成一个迭代器,在每次迭代中返回一个包含两个元素的元组。其中,第一个元素是行索引,通常是整数索引或者标签索引;第二个元素是一个pandas.Series
对象,代表该行的数据,其中的索引是列名,对应的值是该行在该列上的值。
二、使用场景
- 逐行处理数据
- 当你需要对
DataFrame
中的每一行数据进行特定的处理时,可以使用iterrows()
。例如,在你的提供的代码中,通过遍历每一行来获取图像名称和对应的标签数据,然后进行图像读取和标签处理操作。
- 当你需要对
for img_name, target in csv_data.iterrows():
images.append(torchvision.io.read_image(
os.path.join(data_dir, 'bananas_train' if is_train else
'bananas_val', 'images', f'{img_name}')))
targets.append(list(target))
- 复杂的数据处理逻辑
- 如果处理逻辑比较复杂,无法通过向量化操作高效完成,
iterrows()
可以提供一种逐行处理的方式。不过需要注意,对于非常大的数据集,逐行处理可能会比较耗时,此时可以考虑其他更高效的方法,如使用apply
方法结合向量化函数或者使用numba
等工具进行优化。
- 如果处理逻辑比较复杂,无法通过向量化操作高效完成,
三、注意事项
- 性能问题
iterrows()
不是最高效的遍历方式。因为它每次返回的是一个Series
对象,这个对象是对原始数据的视图,可能会涉及一些开销。对于大规模数据集,可能会导致性能下降。
- 可变性风险
- 对返回的
Series
对象进行修改时要小心,因为这可能会影响原始的DataFrame
数据,或者导致意外的结果。如果需要修改数据,最好使用明确的赋值操作或者使用DataFrame
的方法来确保行为的可预测性。
- 对返回的