在pandas中迭代行通常有三种方法:
-
使用iterrows(迭代每一行)
-
使用itertuples(迭代每一行)
-
直接使用values属性(获取所有行的数值列表)
下面我们将介绍每种迭代方法的优缺点及示例代码。
方法一:iterrows
优点
- 和处理csv文件一样逐行处理,非常直观,代码易懂
缺点
-
迭代速度较慢,特别是在处理大型数据集时
-
需要额外的开销来处理每行索引和数据,并转换为Series类型
下面是iterrows的用法示例:
import pandas as pd
# 准备数据
data = {'name':['Tom','Jack','Steve','Ricky'],'age':[28,34,29,42],'gender':['M','F','M','M']}
# 创建DataFrame
df = pd.DataFrame(data)
# 迭代DataFrame中每一行
for index, row in df.iterrows():
print(row['name'], row['age'], row['gender'])
在这个例子中,我们使用iterrows方法迭代df的每一行,并分别访问每一行的’age’、’name’和’gender’列。
输出结果如下:
Tom 28 M
Jack 34 F
Steve 29 M
Ricky 42 M
方法二:itertuples
优点
-
使用namedtuples,比Series类型更易于访问
-
迭代速度相对较快
缺点
- 需要额外的开销来处理每行索引和数据,并转换为namedtuples类型
下面是itertuples的用法示例:
import pandas as pd
# 准备数据
data = {'name':['Tom','Jack','Steve','Ricky'],'age':[28,34,29,42],'gender':['M','F','M','M']}
# 创建DataFrame
df = pd.DataFrame(data)
# 迭代DataFrame中每一行
for row in df.itertuples():
print(row.name, row.age, row.gender)
在这个例子中,我们使用itertuples方法迭代df的每一行,并分别访问每一行的’age’、’name’和’gender’列。
输出结果如下:
Tom 28 M
Jack 34 F
Steve 29 M
Ricky 42 M
方法三:values
优点
- 直接返回ndarray速度相对较快
缺点
-
不利于代码可读性和可维护性
-
由于不返回索引,因此需要额外的代码来跟踪索引信息
下面是values方法的用法示例:
import pandas as pd
# 准备数据
data = {'name':['Tom','Jack','Steve','Ricky'],'age':[28,34,29,42],'gender':['M','F','M','M']}
# 创建DataFrame
df = pd.DataFrame(data)
# 迭代DataFrame中每一行
for row in df.values:
print(row[0], row[1], row[2])
在这个例子中,我们使用values方法访问df的所有行,并分别访问每一行的’age’、’name’和’gender’列。
输出结果如下:
Tom 28 M
Jack 34 F
Steve 29 M
Ricky 42 M
总之,在选择方法时,最好测试不同的方法,并根据数据量和性能的要求选择最佳方法。