我想做的事情如下:
if table['STATUS']=='A'or 'P':
table['END_DATE']=end_date
Run Code Online (Sandbox Code Playgroud)
为了在STATUS中具有S或P的行替换END_DATE的值,这将产生
ValueError: The truth value of an array is ambiguous. Use a.empty, a.any() or a.all().
Run Code Online (Sandbox Code Playgroud)
我知道这是由于数组的广告...这似乎是一个小问题,但我似乎无法找到合适的答案在这里使用什么是正确的构造?我无法从文档中找到它...说使用.any()
if语句是不明确的,因为它评估的系列可能是空的,可能有一些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
Run Code Online (Sandbox Code Playgroud)
0.13中不需要此步骤
In [4]: df['end_date'] = np.nan
Run Code Online (Sandbox Code Playgroud)
从@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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
658 次 |
| 最近记录: |