迭代从 MYSQL 生成的嵌套循环
Iteration over nested loops generated from MYSQL
我正在尝试迭代来自 MYSQL 的生成列表,如下所示:
result8 =[('January', 'Alexandria ', 2),
('January', 'Cairo', 2),
('February', 'Alexandria ', 1),
('March', 'Cairo', 1),
('March', 'Alexandria ', 1),
('April', 'Upper Egypt', 1),
('April', 'Alexandria ', 1),
('May', 'Alexandria ', 1),
('June', 'Delta ', 1),
('June', 'Alexandria ', 1),
('July', 'Giza', 1)]
首先,我尝试收集与同一个月相关的所有项目,然后绘制图表(matplotlib 中的堆积柱形图)
jan=['January']
feb=['February']
mar=['March']
apr=['April']
may=['May']
jun=['June']
july=['July']
aug=['August']
sept=['September']
october=['October']
nov=['November']
dec=['December']
我做了一个函数来迭代和附加不同的月份信息:
def seperated_month(j,month,my_list):
for i in result8:
if i[j] == month:
my_list.append(i[1])
my_list.append(i[2])
seperated_month(0, 'January', jan)
seperated_month(0, 'February', feb)
seperated_month(0, 'March', mar)
seperated_month(0, 'April', apr)
seperated_month(0, 'May', may)
seperated_month(0, 'June', jun)
seperated_month(0, 'July', july)
seperated_month(0, 'August', aug)
seperated_month(0, 'September', sept)
seperated_month(0, 'October', october)
seperated_month(0, 'November', nov)
seperated_month(0, 'December', dec)
这是输出:
['January', 'Alexandria ', 2, 'Cairo', 2]
['February', 'Alexandria ', 1]
['March', 'Alexandria ', 1, 'Cairo', 1]
['April', 'Upper Egypt', 1, 'Alexandria ', 1]
['May', 'Alexandria ', 1]
['June', 'Delta ', 1, 'Alexandria ', 1]
['July', 'Giza', 1]
['August']
['September']
['October']
['November']
['December']
现在应该收集5个列表信息:
alex =[]
cairo =[]
giza =[]
delta=[]
upper_egypt=[]
所以我把所有月份收集起来开始迭代收集每个城市的信息:
all_list = [jan,feb,mar,apr,may,jun,july,aug,sept,october,nov,dec]
for i in all_list:
if all_list[i] == 'Cairo':
cairo.append(all_list[i+1]))
else:
cairo.append(int(0))
以及我将所有月份收集在一起的原因,以便在 12 个月内进行迭代,如果没有数据,它将被零替换。
但我无法进行该迭代,因为 all_list 变成了“嵌套列表”,而且我无法对每个项目进行迭代。
如果我使用嵌套 for 循环,索引将根据内部数据的长度多于或少于 12 个月。
我的要求是迭代 all_list 并根据“城市名称”获取附加信息。
例如最后:
cairo = [2,0,1,0,0,0,0,0,0,0,0,0]
你应该为此任务使用合适的容器和模块,而不是使用几十个变量。
import pandas as pd
df = (pd.DataFrame(result8, columns=['month', 'city', 'value'])
.pivot(index='month', columns='city', values='value')
)
df.plot.bar(stacked=True)
输出:
month April February January July June March May
city
Alexandria 1.0 1.0 2.0 NaN 1.0 1.0 1.0
Cairo NaN NaN 2.0 NaN NaN 1.0 NaN
Delta NaN NaN NaN NaN 1.0 NaN NaN
Giza NaN NaN NaN 1.0 NaN NaN NaN
Upper Egypt 1.0 NaN NaN NaN NaN NaN NaN
我正在尝试迭代来自 MYSQL 的生成列表,如下所示:
result8 =[('January', 'Alexandria ', 2),
('January', 'Cairo', 2),
('February', 'Alexandria ', 1),
('March', 'Cairo', 1),
('March', 'Alexandria ', 1),
('April', 'Upper Egypt', 1),
('April', 'Alexandria ', 1),
('May', 'Alexandria ', 1),
('June', 'Delta ', 1),
('June', 'Alexandria ', 1),
('July', 'Giza', 1)]
首先,我尝试收集与同一个月相关的所有项目,然后绘制图表(matplotlib 中的堆积柱形图)
jan=['January']
feb=['February']
mar=['March']
apr=['April']
may=['May']
jun=['June']
july=['July']
aug=['August']
sept=['September']
october=['October']
nov=['November']
dec=['December']
我做了一个函数来迭代和附加不同的月份信息:
def seperated_month(j,month,my_list):
for i in result8:
if i[j] == month:
my_list.append(i[1])
my_list.append(i[2])
seperated_month(0, 'January', jan)
seperated_month(0, 'February', feb)
seperated_month(0, 'March', mar)
seperated_month(0, 'April', apr)
seperated_month(0, 'May', may)
seperated_month(0, 'June', jun)
seperated_month(0, 'July', july)
seperated_month(0, 'August', aug)
seperated_month(0, 'September', sept)
seperated_month(0, 'October', october)
seperated_month(0, 'November', nov)
seperated_month(0, 'December', dec)
这是输出:
['January', 'Alexandria ', 2, 'Cairo', 2]
['February', 'Alexandria ', 1]
['March', 'Alexandria ', 1, 'Cairo', 1]
['April', 'Upper Egypt', 1, 'Alexandria ', 1]
['May', 'Alexandria ', 1]
['June', 'Delta ', 1, 'Alexandria ', 1]
['July', 'Giza', 1]
['August']
['September']
['October']
['November']
['December']
现在应该收集5个列表信息:
alex =[]
cairo =[]
giza =[]
delta=[]
upper_egypt=[]
所以我把所有月份收集起来开始迭代收集每个城市的信息:
all_list = [jan,feb,mar,apr,may,jun,july,aug,sept,october,nov,dec]
for i in all_list:
if all_list[i] == 'Cairo':
cairo.append(all_list[i+1]))
else:
cairo.append(int(0))
以及我将所有月份收集在一起的原因,以便在 12 个月内进行迭代,如果没有数据,它将被零替换。
但我无法进行该迭代,因为 all_list 变成了“嵌套列表”,而且我无法对每个项目进行迭代。 如果我使用嵌套 for 循环,索引将根据内部数据的长度多于或少于 12 个月。
我的要求是迭代 all_list 并根据“城市名称”获取附加信息。
例如最后:
cairo = [2,0,1,0,0,0,0,0,0,0,0,0]
你应该为此任务使用合适的容器和模块,而不是使用几十个变量。
import pandas as pd
df = (pd.DataFrame(result8, columns=['month', 'city', 'value'])
.pivot(index='month', columns='city', values='value')
)
df.plot.bar(stacked=True)
输出:
month April February January July June March May
city
Alexandria 1.0 1.0 2.0 NaN 1.0 1.0 1.0
Cairo NaN NaN 2.0 NaN NaN 1.0 NaN
Delta NaN NaN NaN NaN 1.0 NaN NaN
Giza NaN NaN NaN 1.0 NaN NaN NaN
Upper Egypt 1.0 NaN NaN NaN NaN NaN NaN