Проблема с форматом даты Python Pandas и Seaborn: strftime работает по-разному для разных графиков seaborn

#python #mysql #pandas #matplotlib #seaborn

#python #mysql #pandas #matplotlib #seaborn

Вопрос:

Итак, в основном у меня есть даты в dataframe, как показано ниже:

 import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

data = {'date': ['January 2020', 'February 2020', 'March 2020', 'April 2020', 'May 2020'],
     'revenue': [29000,31000,32000,25000,34000]}
df = pd.DataFrame(data)

df["date"] = pd.to_datetime(df["date"])

plt.figure(figsize=(14,5))
sns.set()
ax = sns.barplot(data=df, x="date", y="revenue", ci=None)
ax.set_xticklabels(df['date'].dt.strftime('%Y-%m'))
plt.xticks(rotation=45)
plt.show()
  

Это работает так, как задумано. Даты отображаются в формате %Y-%m в порядке, в котором вы видите, что все даты разные. Если вы удалите строку, в которой я изменил формат, используя ‘strftime’, тогда формат дат будет ‘2020: 01-01T00:00:00:00000000’

Теперь все это отлично работает в приведенном выше примере, но когда я делаю то же самое, что и при извлечении из моего SQL-запроса, все месяцы получаются одинаковыми (2020-07), даже если они уникальны, когда я не изменяю ‘strftime’

Я бы подумал, что это как-то связано с моим SQL-запросом, но другой SQL-запрос в том же ноутбуке работает без каких-либо проблем, даже без необходимости изменять ‘strftime’. Все, что я сделал для этого, это pd.to_datetime(), и он сработал и автоматически отформатировался на графике до «2020-07, 2020-08, 2020-09» и т.д.

Что происходит?

Комментарии:

1. «Я бы подумал, что это как-то связано с моим SQL-запросом, но другой SQL-запрос в той же записной книжке работает без каких-либо проблем», Так вы действительно изучили, что вы получили от SQL-запроса, который вы пытаетесь отобразить? Другой запрос, который выдает разные результаты, не имеет значения.

2. Да, он вернул мне результаты в следующем формате [июнь 2020, июль 2020, август 2020]. Это тот же формат, что и запрос, для которого график работал правильно.