web-dev-qa-db-ja.com

Pandasのdatetime <[M8]からの時間の削除

したがって、データフレームに「日付」列があり、日付の形式は次のようになっています

0    1998-08-26 04:00:00 

年月日のみが必要な場合、どうすれば些細な時間を削除できますか?

25
user2926266

最も簡単な方法は、DatetimeIndexのノーマライズを使用することです(最初に列をDatetimeIndexにする必要があります)。

In [11]: df = pd.DataFrame({"t": pd.date_range('2014-01-01', periods=5, freq='H')})

In [12]: df
Out[12]:
                    t
0 2014-01-01 00:00:00
1 2014-01-01 01:00:00
2 2014-01-01 02:00:00
3 2014-01-01 03:00:00
4 2014-01-01 04:00:00

In [13]: pd.DatetimeIndex(df.t).normalize()
Out[13]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-01-01, ..., 2014-01-01]
Length: 5, Freq: None, Timezone: None

In [14]: df['date'] = pd.DatetimeIndex(df.t).normalize()

In [15]: df
Out[15]:
                    t       date
0 2014-01-01 00:00:00 2014-01-01
1 2014-01-01 01:00:00 2014-01-01
2 2014-01-01 02:00:00 2014-01-01
3 2014-01-01 03:00:00 2014-01-01
4 2014-01-01 04:00:00 2014-01-01

DatetimeIndexには、他の便利な属性もあります(例:.year、.month、.day)


0.15からはdt属性になるため、次の方法でこれ(および他のメソッド)にアクセスできます。

df.t.dt.normalize()
# equivalent to
pd.DatetimeIndex(df.t).normalize()
32
Andy Hayden

別のオプション

df['my_date_column'].dt.date

与えるだろう

0        2019-06-15
1        2019-06-15
2        2019-06-15
3        2019-06-15
4        2019-06-15
1
mccandar

別の可能性はstr.splitの使用です

df['Date'] = df['Date'].str.split(' ',expand=True)[0]

これにより、「日付」列が0と1の2つの列に分割されます。日付と時刻の間にある空白を分割インジケーターとして使用します。

返されるデータフレームの列0には日付が含まれ、列1には時刻が含まれます。次に、元のデータフレームの「日付」列を列[0]に設定します。これは、日付のみにする必要があります。