2

我想做类似的事情:

if table['STATUS']=='A'or 'P':
    table['END_DATE']=end_date 

为了替换那些在 STATUS 中具有 S 或 P 的行的 END_DATE 的值,这会产生

ValueError: The truth value of an array is ambiguous. Use a.empty, a.any() or a.all().

我知道这是由于数组寻址...这似乎是一个小问题,但我似乎找不到合适的答案在这里使用的正确构造是什么?我无法从文档中弄清楚...说要使用 .any()

4

1 回答 1

7

if 语句是模棱两可的,因为它评估的 Series 可能为空,可能有一些 True 值或 False 值。因此无法评估。见这里:http ://pandas.pydata.org/pandas-docs/dev/gotchas.html#using-if-truth-statements-with-pandas,http : //pandas.pydata.org/pandas-docs/dev /indexing.html#boolean-indexing,http://pandas.pydata.org/pandas-docs/dev/basics.html#flexible-comparisons _ _

这适用于 0.12

In [2]: df = DataFrame(np.arange(20).reshape(10,2),columns=['A','B'])

In [3]: df['status'] = ['A']*4 + ['invalid'] * 2 + ['P'] * 4

在 0.13 中不需要此步骤

In [4]: df['end_date'] = np.nan

从@DSM 编辑

In [5]: df.loc[(df['status'].isin(['A','P'])),'end_date'] = Timestamp('20130101')

In [6]: df
Out[6]: 
    A   B   status             end_date
0   0   1        A  2013-01-01 00:00:00
1   2   3        A  2013-01-01 00:00:00
2   4   5        A  2013-01-01 00:00:00
3   6   7        A  2013-01-01 00:00:00
4   8   9  invalid                  NaN
5  10  11  invalid                  NaN
6  12  13        P  2013-01-01 00:00:00
7  14  15        P  2013-01-01 00:00:00
8  16  17        P  2013-01-01 00:00:00
9  18  19        P  2013-01-01 00:00:00
于 2013-09-11T22:25:23.437 回答