#python #excel #pandas #dataframe
#python #excel #панды #фрейм данных
Вопрос:
У меня есть таблица из 5 столбцов в Excel, в которой я хочу, чтобы каждая строка в крайнем левом столбце (‘A’ или 0) была ключом, а 4 последующих столбца в этой строке были значениями.
пока у меня есть:
call_data = CallData.to_dict()
call_data.index('A').to_dict(orient='index')
print(call_data)
Это делает заголовок каждого столбца ключевым, а все строки ниже (28) значениями. Есть ли способ изменить это? Я погуглил свое сердце.
Вот как выглядит таблица для 28 строк. Столбец A — это тот, который я хочу сделать ключевым.
A | B |C |D |E
Jan-15| 800 |6.47 |530,000 |1.6
РЕДАКТИРОВАТЬ 3:
Я получаю эту (НОВУЮ) ошибку при запуске кода сейчас:
Traceback (most recent call last):
File "D:/Personal Files/Technical Development/PycharmProjects/Call Center Headcount Model/Call Center Headcount Model.py", line 52, in <module>
dict_result = call_data.set_index('A').to_dict(orient='index')
File "C:anaconda3envsEnviromentlibsite-packagespandascoreframe.py", line 4303, in set_index
raise KeyError(f"None of {missing} are in the columns")
KeyError: "None of ['A'] are in the columns"
Код:
SpreadSheetData = pd.read_excel(
FilePath 'Call Center Work Rules.xlsx',
sheet_name='Data Agg.')
call_data = SpreadSheetData
dict_result = call_data.set_index('A').to_dict(orient='index')
это то, что Fram данных печатает в точности: Print(SpreadSheetData)
Date Calls AVG Call Time Total Call Time Orders
0 2015-01-31 82034.0 6.471024 530843.967784 1.633581e 06
1 2015-02-28 78007.5 6.743146 526015.928294 6.534326e 05
2 2015-03-31 84425.5 6.608714 557943.983912 9.801489e 05
3 2015-04-30 71089.0 6.959075 494713.692979 8.478081e 05
4 2015-05-31 77414.0 6.732396 521181.717775 1.186931e 06
5 2015-06-30 86811.0 6.999769 607656.979210 1.356493e 06
6 2015-07-31 81995.0 7.051137 578157.977305 1.861042e 06
7 2015-08-31 62538.0 7.995746 500037.935402 1.116625e 06
8 2015-09-30 45677.5 7.885182 360175.378283 7.444169e 05
9 2015-10-31 52542.0 8.083627 424729.950838 1.000827e 06
10 2015-11-30 51352.0 7.608637 390718.717376 1.751447e 06
11 2015-12-31 58871.0 7.675463 451862.183771 2.251861e 06
12 2016-01-31 68664.0 7.745629 531845.879620 1.712810e 06
13 2016-02-29 74043.5 7.937032 587685.592567 6.851241e 05
14 2016-03-31 77155.0 8.221454 634326.306777 1.027686e 06
15 2016-04-30 60979.5 8.059682 491475.397091 8.889268e 05
16 2016-05-31 69163.0 7.885619 545393.085653 1.244498e 06
17 2016-06-30 90276.0 8.508960 768154.893931 1.422283e 06
18 2016-07-31 90854.5 8.506498 772853.621003 1.951303e 06
19 2016-08-31 72722.5 7.479822 543951.323850 1.170782e 06
20 2016-09-30 54339.0 7.215742 392096.181983 7.805211e 05
21 2016-10-31 68084.0 7.705519 524622.580078 1.049367e 06
22 2016-11-30 58564.0 7.066731 413856.014456 1.836393e 06
23 2016-12-31 63573.0 7.420257 471727.986085 2.361076e 06
24 2017-01-31 71665.5 7.527221 539442.083982 1.796311e 06
25 2017-02-28 62583.5 7.295476 456576.395666 7.185243e 05
26 2017-03-31 76385.5 7.317654 558962.634577 1.077786e 06
27 2017-04-30 69727.5 7.330732 511153.636251 9.322625e 05
28 2017-05-31 81249.5 7.247624 588865.803177 1.305168e 06
Комментарии:
1. Вы пытаетесь создать dict таким образом, чтобы
{'Jan-15': [800, 6.47, 530000, 1.6]}
? И зная, что у вас есть несколько строк, вы будете иметь их в виде списка, например[{'Jan-15': [800, 6.47, 530000, 1.6}], { ...}]
?2. Да, точно. Я хочу иметь возможность получать доступ к определенному значению из каждого ключа, когда это необходимо, и считал это оптимальным способом. Также я должен уточнить, что «CallData» — это рабочий лист, доступ к которому осуществляется через pandas
3. Таким
CallData
образом, предполагается, что это уже фрейм данных. Можете ли вы попробоватьCallData.set_index('A').to_dict(orient='index')
?4. Только что отредактировал сообщение. Получил еще одну ошибку.
5. Возможно, вы захотите распечатать эти данные вызова перед установкой индекса, просто чтобы убедиться, что все в порядке. Не могли бы вы распечатать часть фрейма данных?
Ответ №1:
Попробуй это:
dict_result = call_data.set_index('A').to_dict(orient='index')
Пример:
call_data = pd.DataFrame([
[2,2,3,4,5],
[1,2,3,4,5],
[6,2,3,4,5],
[7,2,3,4,5]
], columns=['A', 'B', 'C', 'D', 'E'])
dict_result = call_data.set_index('A').to_dict(orient='index')
for k, v in dict_result.items():
print(k, v)
2 {'B': 2, 'C': 3, 'D': 4, 'E': 5}
1 {'B': 2, 'C': 3, 'D': 4, 'E': 5}
6 {'B': 2, 'C': 3, 'D': 4, 'E': 5}
7 {'B': 2, 'C': 3, 'D': 4, 'E': 5}
В случае, если вы хотите найти другой формат, вы можете просмотреть дополнительные параметры, указав:
print(help(call_data.to_dict))
Где вы можете увидеть более подробную информацию:
Parameters
----------
orient : str {'dict', 'list', 'series', 'split', 'records', 'index'}
Determines the type of the values of the dictionary.
- 'dict' (default) : dict like {column -> {index -> value}}
- 'list' : dict like {column -> [values]}
- 'series' : dict like {column -> Series(values)}
- 'split' : dict like
{'index' -> [index], 'columns' -> [columns], 'data' -> [values]}
- 'records' : list like
[{column -> value}, ... , {column -> value}]
- 'index' : dict like {index -> {column -> value}}
Комментарии:
1. Просто имейте в виду, что это выдаст ошибку, если столбец не является уникальным.
2. Я отредактировал свой код выше, но я не думаю, что сделал это правильно, так как получаю эту ошибку: Трассировка (последний последний вызов): File «D:/Personal Файлы/Техническое развитие/PycharmProjects/Модель численности персонала колл-центра/Численность персонала колл-центра Model.py «, строка 50, в <module> call_data.index(‘A’).to_dict(orient=’index’) Ошибка атрибута: объект ‘dict’ не имеет атрибута ‘index’
3. Возможно, вы захотите опубликовать полученное сообщение об ошибке
4. попробуйте
set_index('A')
вместо того, чтобы простоindex('A')
5. Отредактировал мой пост og