2017-10-26 21 views
1

私は2つの日付列、すなわちdate1とdate2を持っています。 私は後で日付2 よりDATE1ている行を選択しようとしていますが、私は2つのdatetime64 [ns]データフレーム列を比較する

print df[df.loc[df['date1']>df['date2']]] 

しようとしたが、私はどちらの場合も、エラー

ValueError: Boolean array expected for the condition, not float64 

答えて

0

を受け取った、アイデアはブールマスクを取得することです。このブール値マスクは、データフレームへのインデックス付けおよび対応する行の検索に使用されます。インデックスdfにこのマスクを使用し、今

mask = df['date1'] > df['date2'] 

df = df.loc[mask] 

これは1行で記述することができますまず、マスクを生成します。

df = df.loc[df['date1'] > df['date2']] 

あなたはdfが今、あなたの最終的な結果を持って、この後にインデックスの別のレベルを実行する必要はありません。 locは常にコピーを返し、プレーンなインデックスはビューを返しますので、このフィルタリングされたデータフレームに対して操作と再割り当てを実行する予定がある場合は、locをお勧めします。以下は


同じことをやっていくつかのより多くのメソッドです:

オプション1
df.query

df.query('date1 > date2') 

オプション2
df.eval

df[df.eval('date1 > date2')] 

あなたの列が日付でない場合、あなたにもここでそれらをキャストすることがあります。 pd.to_datetimeを使用します。

df.date1 = pd.to_datetime(df.date1) 
df.date2 = pd.to_datetime(df.date2) 

それとも、あなたのCSVを読み込むときに、上parse_datesスイッチを設定してください:

df = pd.read_csv(..., parse_dates=['date1, date2']) 
関連する問題