我在SQL中有一个基于月份名称的表。用monthnumbers int排序。我想在Python Jupyter Notebook中用matplotlib制作一个折线图。但是线图给了我一个字母顺序(a,b,c等......)
这不正确。我需要月份订单。
我该怎么做? 我在select语句中同时包含monthnumber和monthname:
cursor = conx.cursor()
cursor.execute(sql)
Revenue = []
Monthnumber = []
Month = []
Maandnummer = []
for row in cursor:
regio.append(str(row.Mond))
Revenue.append(int(row.Revenue))
Month.append(int(row.Month))
Maandnummer.append(int(row.Monthnumber))
df = pd.read_sql(sql, conx)
Months = ['januari','februari','maart','april', 'mei', 'juni', 'juli', 'augustus','september', 'oktober', 'november', 'december']
mapping = {Maandnummer: i for i, maandnummer in enumerate(Months)}
key = df['maandnummer'].map(mapping)
# Plot de inhoud van het dataframe (tabel als resultaat van query)
plt.figure(figsize=(20,10))
aantal.sort()
plt.plot(key, omzet, 'ro')
plt.ylabel('Omzet')
plt.xlabel('Regio')
plt.show()
答案 0 :(得分:0)
我迷失在不同的列表和列之间,其中一些似乎包含相同的内容。所以这是一个最小的例子。
这个想法确实是根据月份在列表中的位置将月份映射到一个数字。这可以使用字典来完成:dict(zip(Months,range(len(Months))))
然后,可以将此映射应用于数据帧列。原则上,这是问题中代码的方法,但是虽然它不可重复,但以下情况如下。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
Months = ['januari','februari','maart','april', 'mei', 'juni', 'juli',
'augustus','september', 'oktober', 'november', 'december']
df = pd.DataFrame({"maand" : np.random.choice(Months, size=100),
"omzet" : np.random.binomial(100,0.5, size=100)})
mapping = dict(zip(Months,range(len(Months))))
df['maandnummer'] = df['maand'].map(mapping)
plt.figure()
plt.plot(df['maandnummer'], df["omzet"], 'ro')
plt.xticks(range(len(Months)),Months, rotation=45,ha="right")
plt.ylabel('Omzet')
plt.xlabel('Maand')
plt.show()