私は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
私は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
を受け取った、アイデアはブールマスクを取得することです。このブール値マスクは、データフレームへのインデックス付けおよび対応する行の検索に使用されます。インデックス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'])