【发布时间】:2014-06-13 09:12:23
【问题描述】:
我有一个看起来像这样的 pandas 数据框(它很大)
date exer exp ifor mat
1092 2014-03-17 American M 528.205 2014-04-19
1093 2014-03-17 American M 528.205 2014-04-19
1094 2014-03-17 American M 528.205 2014-04-19
1095 2014-03-17 American M 528.205 2014-04-19
1096 2014-03-17 American M 528.205 2014-05-17
现在我想逐行迭代,当我遍历每一行时,ifor 的值
每行中的内容可能会根据某些条件而变化,我需要查找另一个数据框。
现在,我如何在迭代时更新它。 尝试了一些方法,但都没有奏效。
for i, row in df.iterrows():
if <something>:
row['ifor'] = x
else:
row['ifor'] = y
df.ix[i]['ifor'] = x
这些方法似乎都不起作用。我没有看到数据框中更新的值。
【问题讨论】:
-
我想你想要
df.ix[i,'ifor']。df.ix[i]['ifor']是有问题的,因为它是链式索引(这在 pandas 中不可靠)。 -
能否提供其他框架以及
<something>。您的代码是否可以矢量化将取决于这些事情。一般来说,避免iterrows。在您的情况下,您应该绝对避免它,因为每一行都是objectdtypeSeries。 -
您最好为您的条件创建一个布尔掩码,更新所有这些行,然后将其余行设置为其他值
-
Please do not use iterrows(). 它是 pandas 历史上最糟糕的反模式的公然推动者。
标签: python pandas updates dataframe