#python #excel #dataframe
#python #excel #фрейм данных
Вопрос:
Я работаю с Google или инструментами, и в одном из примеров приведена структура данных. Я хотел бы импортировать эту структуру данных на основе таблицы Excel.
Это заданная структура данных:
jobs = [[[(3, 0), (1, 1), (5, 2)],
[(2, 0), (4, 1), (6, 2)],
[(2, 0), (3, 1), (1, 2)]],
[[(2, 0), (3, 1), (4, 2)],
[(1, 0), (5, 1), (4, 2)],
[(2, 0), (1, 1), (4, 2)]],
[[(2, 0), (1, 1), (4, 2)],
[(2, 0), (3, 1), (4, 2)],
[(3, 0), (1, 1), (5, 2)]]]
Что мне нравится делать, так это импортировать jobs
на основе таблицы Excel с данными, представленными как:
Job Task M1 M2 M3
1 1 3 1 5
1 2 2 4 6
1 3 2 3 1
2 1 2 3 4
2 2 2 5 4
2 3 2 1 4
3 1 2 3 4
3 2 3 1 5
Комментарии:
1. Что вы уже пробовали? Вы рассматривали
pandas.read_excel
?2. Да, я пробовал
pandas.read_excel
(который отлично работает). Но я не уверен, как импортировать его, чтобы получить указанный тип данных (список с кортежами?)
Ответ №1:
Вы должны реорганизовать все свои данные, сгруппировав их по заданиям. Например:
import pandas as pd
df = pd.read_excel('bb.xlsx')
jobs = set(df['Job']) #remove duplicates
result = [[[ (df['M1'][i],0), (df['M2'][i],1), (df['M3'][i],2) ] for i in df.index if df['Job'][i] == job] for job in jobs]
print(result)
ПРЕДУПРЕЖДЕНИЕ: результат не совсем такой, как вы написали. Я думаю, вы неправильно указали некоторые данные. Скажите мне, если я ошибаюсь.
Комментарии:
1. Да, вы правы. M1 задачи 2 в Job2 должно быть ‘1’ вместо ‘2’. Я попытался запустить ваш код, но, к сожалению, я получаю синтаксическую ошибку
print [[[ (df['M1'][i],0), (df['M2'][i],1), (df['M3'][i],2) ] for i in df.in dex if df['Job'][i] == job] for job in jobs] ^ SyntaxError: invalid syntax
2. вы используете python 2 или 3? в версии 3 синтаксис print отличается, print (…)
3. Использование
print ([[ (df['M1'][i],0), (df['M2'][i],1), (df['M3'][i],2) ] for i in df.index if df['Job'][i] == job] for i in jobs)
возвращает<generator object <genexpr> at 0x00000000094E4750>
. Как я могу получить структуру данных, как показано в первоначальном вопросе? Структура данных используется, например, в нескольких циклах.4. Я отредактировал свой ответ, чтобы он работал как на Python 2, так и на 3. Вы пропустили некоторые круглые скобки.
Ответ №2:
Я даю другой ответ, используя groupby
API pandas:
import pandas as pd
df = pd.read_excel('bb.xlsx')
result = [[[ (row['M1'],0), (row['M2'],1), (row['M3'],2) ] for idx, row in grpdf.iterrows()] for grpname, grpdf in df.groupby('Job')]
print(result)