2016-04-19 9 views
0

dupの列の値がFalseの場合、timeの値をplotListに追加しようとしています。 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()Pandasの後ろにelse文を追加する

は誰が起こっているa)のかを説明できることを、私は、これはうまくいくかもしれないと思っていたが、私はエラーを取得

DF =

lat    time  trip_id  diff shifted Segment dup 
-7.12040 2015-12-24 02:03:10 18060.0 0.00003 0.00000  1 False 
-7.12043 2015-12-24 02:03:12 18060.0 0.00000 0.00003  2 False 
-7.12043 2015-12-24 02:03:14 18060.0 0.00003 0.00003  2 True 
-7.12046 2015-12-24 02:03:16 18060.0 0.00003 0.00003  2 True 
-7.12049 2015-12-24 02:03:19 18060.0 0.00003 0.00000  3 False 
-7.12052 2015-12-24 02:03:22 18060.0 0.00000 -0.00473  4 False 

コード=

plotList=[] 
def pullLine(row): 
    if row['dup'] == False: 
     plotList.append(row['time']) 
pullLine(df) 

ここで、そしてb)避けるために私ができることは? Falseが曖昧になることがあるかどうか尋ねる方法を理解できません。

多くのありがとうございます。

plotList = df.loc[df['dup'] == False, 'time'].values 
あなたはあなたの関数へのパラメータとして全体のDFを渡しているが、1行としてそれを扱っている

...

に応じて:

+0

'row'は何ですか?あなたのデータを生成し、 'pullLine'関数を適用する完全な例を作ることができますか? –

+0

'df ['time'] [〜df ['dup']]'は動作するはずですか?あるいは、applyを使う必要があります: 'df.apply(pullLine、axis = 1)'はあなたの 'plotList'で期待どおりに動作します。 – jeremycg

答えて

2

は、私はあなたがそれをこの方法で行うことができますねあなたが得るために何をしたいですか - 配列またはリスト:あなたが偽のフィルタリングされているので、

In [167]: df.loc[df['dup'] == False, 'time'].values 
Out[167]: 
array(['2015-12-24 02:03:10', '2015-12-24 02:03:12', '2015-12-24 02:03:19', 
     '2015-12-24 02:03:22'], dtype=object) 

In [168]: df.loc[df['dup'] == False, 'time'].tolist() 
Out[168]: 
['2015-12-24 02:03:10', 
'2015-12-24 02:03:12', 
'2015-12-24 02:03:19', 
'2015-12-24 02:03:22'] 
1

を私は否定~を使用して、dup列でフィルタう。

>>> df[~df.dup].time 
0 2015-12-24 02:03:10 
1 2015-12-24 02:03:12 
4 2015-12-24 02:03:19 
5 2015-12-24 02:03:22 
Name: time, dtype: object 

あなたが本当にリスト形式でそれをしたい場合:

df[~df.dup].time.tolist() 
['2015-12-24 02:03:10', 
'2015-12-24 02:03:12', 
'2015-12-24 02:03:19', 
'2015-12-24 02:03:22']