我想遍历 pandas DataFrame 中的每一行,并对每行中的元素执行某些操作。
目前我的代码是:
for row in df.iterrows():
if row['col'] > 1.5:
doSomething
但它告诉我'Tuple indices must be integers, not str'。我如何在特定行中访问我想要的列?
axis=1
的apply
函数。例如:def my_function(row):
if row['col'] > 1.5:
doSomething()
else:
doSomethingElse()
my_df.apply(my_function, axis=1)
最简单的解决方案可能是使用APPLYMAP或APPLY函数,它们将该函数应用于数据集中的每个数据值。
您可以通过以下几种方式执行此操作:
df.applymap(someFunction)
或者
df[["YourColumns"]].apply(someFunction)
iterrows
产生(索引,Series)对。因此,请使用:
for index, row in df.iterrows():
if row['col'] > 1.5:
doSomething
df.loc[df['col']>1.5, 'col'] = doSomething
会更好,假设doSomething
是一个数字。如果不是,你需要更详细地解释doSomething
是什么。 - unutbu
df.loc[df ['col']> 1.5,'col'] = doSomething
将实现相同结果,并且速度非常快,因为它将进行向量化处理。 - EdChumnp.where
或者只用两个语句,例如df['col'] = np.where(df['col'] > 1.5, doSomething, doSomethingElse)
,或者添加另一个语句来处理相反的情况df.loc[df['col'] <=1.5, 'col'] = doSomethingElse
。 - EdChum