如何遍历数据框并对该数据框的每一行执行一些操作?
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
【讨论】:
以上是关于如何遍历数据框并对该数据框的每一行执行一些操作?的主要内容,如果未能解决你的问题,请参考以下文章