Создание коробки и усов для каждого листа Excel - PullRequest
0 голосов
/ 20 ноября 2018

Я ОЧЕНЬ новичок в мире python / pandas / matplotlib, но недавно я использовал его для создания коробок и усов.Мне было любопытно, как создать прямоугольник с усами для каждого листа, используя определенный столбец данных, т.е. у меня есть 17 листов, и мне нужны столбцы с именами HMB и DV для каждого.Я думаю, что хочу построить 17 наборов данных на Box и Whisker для HMB и еще 17 наборов данных на графике DV.Ниже приведено то, что у меня есть.

Я могу открыть файл и получить все листы в list_dfs, но потом не знаю, куда идти.Я собирался попробовать нарезать каждый набор вручную (как я начал ниже, прежде чем прийти сюда за помощью), но когда у меня будет больше данных в будущем, я не хочу делать это вручную.Любая помощь будет принята с благодарностью!

import pandas as pd
import numpy as np
import xlrd
import matplotlib.pyplot as plt
%matplotlib inline
from pandas import ExcelWriter
from pandas import ExcelFile

excel_file =  'Comparison.xlsm'

list_dfs = []

xls = xlrd.open_workbook(excel_file,on_demand=True)
for sheet_name in xls.sheet_names():
    df = pd.read_excel(excel_file,sheet_name)
    list_dfs.append(df) 
#print(len(list_dfs))

a = list_dfs[0]
b = list_dfs[1]
c = list_dfs[2]
d = list_dfs[3]
e = list_dfs[4]
f = list_dfs[5]

data_a = a.loc[:,['DV','HMB']]
data_b = b.loc[:,['DV','HMB']]

Я попытался включить изображение того, как выглядит каждый лист.Все они имеют одинаковый заголовок и расположение, что полезно.

edit

Итак, я добавил предложенный ниже код и удалил ручную нарезку, и теперь у меня есть все мои данные в формате словаря, но я могуНе бери для меня панд или матплотлиб.Интересно, есть ли шаг, который я пропускаю.Я думал о создании одного словаря для HMB и одного для DV.Я хотел бы, чтобы на каждом элементе в списке имелось одно поле с усами для одного элемента в списке.

d_dv = {}
d_hmb = {}
for i, sheet_name in enumerate(xls.sheet_names()):
    df = pd.read_excel(excel_file,sheet_name)
    d_dv["PSPPM" + str(i)] = df.loc[:,['DV']]
    d_hmb["HMB" + str(i)] = df.loc[:,['HMB']]

Example of each sheets format

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете начать с создания каждого нарезанного df в том же цикле.Для этого вы можете определить словарь и добавить новую запись на каждой итерации:

d = {}
for i, sheet_name in enumerate(xls.sheet_names()):
    df = pd.read_excel(excel_file,sheet_name)
    d["data" + str(i)] = df.loc[:,['DV','HMB']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...