如何遍历数据框并对该数据框的每一行执行一些操作?

Posted

技术标签:

【中文标题】如何遍历数据框并对该数据框的每一行执行一些操作?【英文标题】:How to iterate through a data frame and for every row of that data frame, perform some actions? 【发布时间】:2019-09-07 22:58:54 【问题描述】:

我有一个场景,我在 CSV 文件中有一些数据,我需要遍历每一行并查找是否找到特定值。如果找到,则执行一项操作,否则执行另一项操作。

这是我使用的数据集:

import pandas as pd

dataset = pd.read_csv('Teams\India.csv')

Ind = 0 SA = 0

if(dataset.loc[(dataset['Opponent']) == 'South Africa' & (dataset['Result']) == 'Won']): Ind = Ind + 1 else: SA = SA + 1

根据我的 CSV 文件,印度与南非打了 6 场比赛,赢了 5 场。所以,最后'Ind'的值必须是5,'SA'的值必须是1。

但是当我尝试运行此代码时,无论我做什么,都会收到以下错误:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]

【问题讨论】:

您还可以将您拥有的示例数据集作为文本发布吗?以获得更好的参考。谢谢 @anky_91,我已按照您的要求发布了数据集。 【参考方案1】:

看起来你可以一口气完成:

Ind = ((dataset['Opponent'] == 'South Africa') & (dataset['Result'] == 'Won')).sum()
SA = len(dataset) - Ind

【讨论】:

非常感谢您的回复!但是有一个小问题。它正在工作,但它只生成一个值为 5 而不是 2 个变量的变量 Ind。我不知道为什么! 两个命令都运行了吗?试试print(Ind, SA)看看有没有错误? 成功了!我刚刚用Sa替换了SA,它开始正常工作。 IDK 为什么!【参考方案2】:

您尝试执行的操作将不起作用,因为 loc 将返回您的条件为 True 的所有行。它们不会自动迭代。

对于您要执行的操作,没有必要使用 iterrows 或 if 语句。

试试这个:

Ind = dataset.loc[(dataset['Opponent'] == 'South Africa') & (dataset['Result'] == 'Won')].shape[0]

SA = dataset.loc[(dataset['Opponent'] != 'South Africa') | (dataset['Result'] != 'Won')].shape[0]

这样会比使用for loop更快

【讨论】:

【参考方案3】:

你需要 if( (condition1 == x) & (condition2 == y)): ...

你还需要一些循环,比如

for row in data:
 if...:
  counter += 1

【讨论】:

以上是关于如何遍历数据框并对该数据框的每一行执行一些操作?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用函数迭代python中数据框的每两列?

如何在不使用数据框的情况下将一行分解为多行?

遍历数据框并绘制每一列

如何遍历数据框的行并检查列行中的值是不是为 NaN

如何将整个列表分配给熊猫数据框的每一行

如何将数据框附加到另一个数据框的每一行? [复制]