当您使用 pandas 时,您一定遇到过处理 DataFrame 中的每一行的需要。尽管 pandas 是为更快的矢量化操作而设计的,但行式迭代在特定场景中也很重要。让我们深入研究这个博客,了解我们可以迭代 DataFrame 的各种方法以及何时使用它们。
目录
方法 1:使用 iterrows() – 对于较小的数据集
这 迭代行() 方法允许您循环遍历(索引,系列)对中的每一行。尽管它使用起来很简单,但对于较大的数据集来说速度较慢。最好用于需要快速操作的小型数据集。
现在让我们通过一个例子来理解这一点:
想象一下,您正在根据一小部分学生的分数对他们进行评分。
import pandas as pd test_data = {'Name': ['Eva', 'Bobby', 'Charles'], 'Score': [85, 62, 90]} df = pd.DataFrame(test_data) for index, row in df.iterrows(): test_grade = 'A' if row['Score'] >= 80 else 'B' print(f"{row['Name']} scored {row['Score']} and got grade {test_grade}.")
输出:
Eva scored 85 and got grade A. Bobby scored 62 and got grade B. Charles scored 90 and got grade A.
方法 2:使用 itertuples() – 对于较大的数据集
迭代元组() 以命名元组的形式返回值,这使得它比 迭代行()。它最好用于性能很重要的较大数据集。
现在,如果我们举一个例子,您需要在更大的数据集中计算员工的工资:
test_data = {'Employee': ['Harry', 'Hermione', 'Ron'], 'Monthly Salary': [3000, 4000, 3500]} df = pd.DataFrame(test_data) for row in df.itertuples(): annual_salary = row._2 * 12 print(f"{row.Employee} earns {annual_salary} annually.")
输出:
Harry earns 36000 annually. Hermione earns 48000 annually. Ron earns 42000 annually.
方法 3:使用 apply() – 用于复杂的逐行转换
这 申请() 使您能够将函数应用于每一行和每一列。如果您想要执行简洁且矢量化的逐行计算,它非常有用或非常理想。它主要用于跨行和列的复杂或数学运算。
现在,我们可以举一个例子,您想要计算一组人的体重指数(BMI)。
test_data = {'Name': ['Eva', 'Bobby'], 'Weight (kg)': [70, 85], 'Height (m)': [1.75, 1.80]} df = pd.DataFrame(test_data) df['BMI'] = df.apply(lambda row: row['Weight (kg)'] / (row['Height (m)'] ** 2), axis=1) print(df)
输出:
姓名 | 重量(公斤) | 高度(米) | 体重指数 | |
0 | 伊娃 | 70 | 1.75 | 22.857143 |
1 | 鲍比 | 85 | 1.80 | 26.234568 |
方法 4:基于索引的迭代 (iloc[] 或定位[]) – 对于特定行
国际劳工组织[] 和洛克[] 当您想要处理或更新数据帧中的特定行时,为您提供精确的索引。当您需要控制行以访问、修改它们并应用条件更新时,它非常有用。
如果我们举一个例子,您试图在金融数据集中标记超过一定金额的交易。
test_data = {‘交易ID’: [101, 102, 103], ‘数量’: [500, 1500, 750]}
test_data = {'Transaction ID': [101, 102, 103], 'Amount': [500, 1500, 750]} df = pd.DataFrame(test_data) for i in range(len(df)): if df.loc[i, 'Amount'] > 1000: df.loc[i, 'Flag'] = 'High' else: df.loc[i, 'Flag'] = 'Normal' print(df)
输出:
交易ID | 数量 | 旗帜 | |
0 | 101 | 500 | 普通的 |
1 | 102 | 1500 | 高的 |
2 | 103 | 750 | 普通的 |
哪种方法:何时使用
方法 | 最适合 |
迭代行() | 较小的数据集或需要快速探索任务的数据集。 |
迭代元组() | 当您拥有需要更好性能的更大数据集时,这是最好的选择。 |
申请() | 当需要复杂的行变换或向量化逻辑时使用它。 |
国际劳工组织[]/loc[] | 这使您可以通过条件逻辑精确控制特定行。 |
结论
总之,虽然有多种方法可以迭代 Pandas DataFrame 中的行,但选择取决于任务的复杂性和数据集大小。对于小型数据集或自定义逻辑,您可以使用 iterrows() 或 apply()。为了在更大的数据集上获得更好的性能,请使用矢量化操作或 itertuples()。
在 Pandas Dataframe 中迭代行的方法 – 常见问题解答
迭代 panda DataFrame 的行的最佳方法是什么?
对于较小的数据集,您可以使用 迭代行() 对于较小的数据集,或者对于所有对性能至关重要的数据集,您可以使用 迭代元组()。
如何迭代 pandas 中的多行?
如果你想在 pandas 中迭代多行,你可以使用 iloc 进行切片[] 或定位[] 迭代行的子集。
代码:
for _, row in df.loc[0:5].iterrows(): print(row)
pandas 中循环的替代方案是什么?
矢量化操作和方法(例如 apply() 或 transform())是比显式循环更快的替代方法。
itertuples() 比 iterrows() 更快吗?
是的, 迭代元组() 速度更快,因为它避免或不将每一行转换为系列对象。