パンダデータフレームに日時に基づいてデータを選択します

DHU:

私は、ユーザーにパンダのデータフレーム内のデータを選択するように構成を作成するための柔軟性を提供します「機能の選択」のいくつかの並べ替えを作成しようとしています。しかし、私はそのパズルを私にいくつかの問題に走りました。

以下は簡単な例です:

>>> import pandas as pd
>>> df = pd.DataFrame({'date': pd.date_range(start='2020-01-01', periods=4), 'val': [1, 2, 3, 4]})
>>> df
        date  val
0 2020-01-01    1
1 2020-01-02    2
2 2020-01-03    3
3 2020-01-04    4

質問1:私は異なった列に関数を適用するとき、なぜ私は別の結果を得るのですか?

>>> import datetime
>>> bydatetime = lambda x : x == datetime.date(2020, 1, 1)
>>> bydatetime(df['date'])
0    False
1    False
2    False
3    False
Name: date, dtype: bool
>>> df['date'].apply(bydatetime) # why does this one work?
0     True
1    False
2    False
3    False
Name: date, dtype: bool

私はnumpyのの使用している場合しかし、datetime64もしくはパンダTimestampラムダ関数を作成するために、種類を、それが働くだろう。

>>> import numpy as np
>>> bynpdatetime = lambda x : x == np.datetime64('2020-01-01')
>>> bynpdatetime(df['date'])
0     True
1    False
2    False
3    False
Name: date, dtype: bool
>>> df['date'].apply(bynpdatetime)
0     True
1    False
2    False
3    False
Name: date, dtype: bool
>>> bypdtimestamp = lambda x : x == pd.Timestamp('2020-01-01')
>>> bypdtimestamp(df['date'])
0     True
1    False
2    False
3    False
Name: date, dtype: bool
>>> df['date'].apply(bypdtimestamp)
0     True
1    False
2    False
3    False
Name: date, dtype: bool

だから私は、次のような単純な選択を使用するために戻って、使用してdatetime.date動作しませんでした。場合はdatetime.dateうまく動作しません、なぜでしょうdf['date'].apply(bydatetime)動作しますか?

>>> df[df['date'] == datetime.date(2020, 1, 1)]
Empty DataFrame
Columns: [date, val]
Index: []
>>> df[df['date'] == np.datetime64('2020-01-01')]
        date  val
0 2020-01-01    1
>>> df[df['date'] == pd.Timestamp('2020-01-01')]
        date  val
0 2020-01-01    1

最後になりましたが、理由のタイプであるdatedatetime64のデータフレームではなくTimestamp、一つのセルを選択したとき?それらの間の正確な違いは何ですか?

>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   date    4 non-null      datetime64[ns]
 1   val     4 non-null      int64         
dtypes: datetime64[ns](1), int64(1)
memory usage: 192.0 bytes
>>>
>>> df['date'][0]
Timestamp('2020-01-01 00:00:00')

私はここで理解していないという根本的な何かがあると確信しています。建設的な何のためにありがとうございました。

ALollz:

幸いにも私は、古いバージョンの持っているpandas(0.25)を、あなたはあなたが警告を取得bynpdatetime(df['date'])しますが、その動作を確認する理由を正確に説明し、。これを処理する方法については、前後のビットがありました。この振る舞いを見てすることは非常にバージョン固有のものになりますように。

FutureWarning:「datetime.date」で日付時刻のシリーズを比較します。現在、「datetime.dateは」datetime型に強制変換されます。将来のではパンダ強要しませんが、とdatetime.date 『「の値が等しくは比較にならないだろう』。現在の動作を保持するには、「pd.Timestamp」と日時に「datetime.date」を変換します。

日時機能では、pandas上に構築されるnp.datetime64np.timedelta64dtypes。あなたはdatetimeモジュールを使用してはならない、彼らは標準ライブラリと矛盾している特定の選択肢を作ってきたように。予期しない動作のすべては、このためです。


他の国連関連の質問に答えるために。datetime64アレイ型、または概念のようなものです。(この場合、Aにそのアレイpd.Series)スカラーで構成されることになるtimedelta64オブジェクト。これはで説明しているドキュメント

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=365282&siteId=1