Как по символьному значению даты и времени отрисовывать график только по дате?

Есть следующий Датасет:

Index   Data
0   2017-05-08 21:46:36+00:00
1   2017-05-09 21:46:34+00:00
2   2017-05-10 21:46:34+00:00
3   2017-05-11 21:46:17+00:00
4   2017-05-12 21:46:17+00:00

Необходимо в колонке Data оставить только дату формата %Y-%m-%d

То есть, на выходе необходимо получить:

Index   Data
0   2017-05-08
1   2017-05-09
2   2017-05-10
3   2017-05-11
4   2017-05-12

Ответы (2 шт):

Автор решения: CrazyElf

Отдельно даты как типа в Pandas вроде бы нет, можно превратить дату-время в строку нужного формата:

df['Data'] = df['Data'].dt.strftime('%Y-%m-%d')

Ну либо так (как напомнил strawdog):

df['Data'] = df["Data"].dt.date

А если у вас там строки, а не даты, то попробуйте так:

df['Data'] = df["Data"].str.slice(0, 10)
→ Ссылка
Автор решения: MaxU

Судя по дополнительной информации из комментариев, вы пытаетесь нарисовать график, используя в качестве значений по оси X строки, в которых хранится дата и время. Pandas не понимает на сколько отличается одна строковая дата от другой и поэтому на графике вы получите совсем не то, что ожидаете.

Приведите столбец Data к типу данных datetime64 и попробуйте начертить график средствами Pandas - скорее всего вы получите приемлемый результат, даже не обрезая компоненту времени.

df["Data"] = pd.to_datetime(df["Data"])
df.set_index("Date")["<column_name_to_plot>"].plot()

Пример:

In [134]: df = pd.DataFrame({"dt": ["2000-01-01", "2000-01-02", "2021-10-10"], "val": [1,2,3]})

In [135]: df.set_index("dt").plot()
Out[135]: <AxesSubplot:xlabel='dt'>

введите сюда описание изображения а теперь нарисуем тот же самый график, предварительно преобразовав столбец "dt" к типу данных datetime64:

In [136]: df["dt"] = pd.to_datetime(df["dt"])

In [137]: df.set_index("dt").plot()
Out[137]: <AxesSubplot:xlabel='dt'>

введите сюда описание изображения

→ Ссылка