Итак, у меня есть столбец "Дата" в моем кадре данных, где даты имеют формат, подобный этому
0 1998-08-26 04:00:00
Если я хочу только месяц и день года, как я могу отказаться от тривиального часа?
Итак, у меня есть столбец "Дата" в моем кадре данных, где даты имеют формат, подобный этому
0 1998-08-26 04:00:00
Если я хочу только месяц и день года, как я могу отказаться от тривиального часа?
Самый быстрый способ - нормализовать 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()
Другой вариант
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
Другая возможность - использование str.split
df['Date'] = df['Date'].str.split(' ',expand=True)[0]
Это должно разделить столбец "Дата" на два столбца, отмеченных 0 и 1. Используя пробел между датой и временем в качестве индикатора разделения.
Столбец 0 возвращенного фрейма данных затем включает дату, а столбец 1 - время. Затем он устанавливает в столбце "Дата" вашего исходного кадра данных столбец [0], который должен быть просто датой.