Вытяните два столбца из Excel и добавьте пары значений ключа в словарь

Приношу извинения, если подобные вопросы были заданы - я перерыл довольно много, но они не соответствовали моей конкретной проблеме.

По сути, у меня есть электронная таблица Excel с двумя столбцами; Имя и электронная почта. Я использую pandas, чтобы получить два столбца из файла. Я хочу получить значения из столбцов по порядку и добавить их в словарь, чтобы позже можно было легко ссылаться на пары имен и адресов электронной почты.

В настоящее время у меня есть две функции в двух файлах. Один из них — мой файл/функция main, а другой — файл с именем readExcel и функцией с именем read:

# readExcel.py
import pandas as pd

def read(fileName: str, sheetName: str):
    f = pd.read_excel(fileName, sheet_name = sheetName)
    return f

# __main__.py
import readExcel as re

from pathlib import Path

def main():
    contacts = {}

    p = Path(__file__).with_name('contacts.xlsx')
    f = re.read(p, "Sheet1")

    for n in f["Name"]:
        for e in f["Email"]:
            contacts[n] = e

    print(contacts)

Проблема, с которой я сталкиваюсь здесь, заключается в том, что результирующий словарь неупорядочен, например, Bob Testerson: jim.tester@gmailcom, Jim Tester: [email protected]

Как мне правильно упорядочить данные, которые я извлекаю из электронной таблицы?

Обновлено: по запросу я добавлю дополнительную информацию о файле Excel и предпочтительном порядке.

Файл Excel выглядит следующим образом: Предварительный просмотр изображения Excel

Что касается упорядочения данных, мне кажется, это лучше сделать до добавления в словарь, но для меня это не является обязательным требованием. Кроме того, меня не особенно волнует порядок, в котором пары ключ/значение появляются в словаре, а скорее то, что пары ключ/значение отображаются так же, как и в файле Excel, например,

{
    "Jon Testerson": "[email protected]", 
    "Henry": "[email protected]", 
    "Bryce Testington": "[email protected]", 
    "Greg": "[email protected]", 
    "Jerry Testerfield", "[email protected]"
}

Как выглядят данные в столбцах, которые вы извлекаете. Можете ли вы показать пример, то есть всегда ли это имя и фамилия, или иногда только одно из них? Вы пытаетесь упорядочить данные в словаре после их извлечения или до? Какой порядок вы желаете? В алфавитном порядке по адресу электронной почты в значениях? т.е. покажите пример неправильного порядка и правильного порядка.

dasvootz 20.06.2019 19:35

Я обновлю описание, включив в него пример файла Excel, а также дополнительную информацию о данных и предпочтительном порядке.

pybean 20.06.2019 19:37

Вы что-нибудь делаете с DataFrame? Вы должны использовать Панды?

wwii 20.06.2019 20:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
3
1 577
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я уверен, что есть более простой способ сделать это, но я бы поместил данные во фрейм данных, а затем использовал метод sort_values ​​для их сортировки. Это будет выглядеть примерно так:

# readExcel.py
import pandas as pd

def read(fileName: str, sheetName: str):
  f = pd.read_excel(fileName, sheet_name = sheetName)
  return f

# __main__.py
import readExcel as re

from pathlib import Path

def main():
  df = pd.DataFrame()
  contacts = {}

 p = Path(__file__).with_name('contacts.xlsx')
 f = re.read(p, "Sheet1")
 df = df.append(f,ignore_index=True)

print(df.sort_values(by=["Name","Email"]))

Опять же, возможно, это не лучший способ сделать это, но он должен работать, если на листе 1 есть дополнительная информация, тогда перед печатью я бы сделал:

df = df[['Name','Email']]

Который затем выберет только имя и адрес электронной почты

Ответ принят как подходящий

Попробуйте это, используя метод pandas to dict. Просто измените имена столбцов, если вам нужно.

import pandas as pd

def read_excel(path_to_file):

    df = pd.read_excel(path_to_file)

    return df

def dataframe_to_dict(df, key_column, value_column):

    name_email_dict = df.set_index(key_column)[value_column].to_dict()

    return name_email_dict

if __name__ == "__main__":

    path_to_file = 'C:\projects\scratchwork\excel_dict.xlsx'

    df = read_excel(path_to_file)

    name_email_dict = dataframe_to_dict(df,'Name','Email')

    print(name_email_dict)

Другие вопросы по теме