Вытащите два столбца из Excel и добавьте пары значений ключа в словарь - PullRequest
2 голосов
/ 20 июня 2019

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

По сути, у меня есть таблица Excel с 2 столбцами;Имя и адрес электронной почты.Я использую 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: bob.testerson@gmail.com

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

РЕДАКТИРОВАТЬ: По запросу я добавлю дополнительную информацию, касающуюся файла Excel и предпочтительного порядка.

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

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

{
    "Jon Testerson": "jon.test@gmail.com", 
    "Henry": "henrytest@gmail.com", 
    "Bryce Testington": "brycetestington@gmail.com", 
    "Greg": "greg_test@yahoo.com", 
    "Jerry Testerfield", "jerrytester@hotmail.com"
}

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Попробуйте, используя метод «Панды для диктовки».Просто измените имена столбцов, если вам нужно.

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)
0 голосов
/ 20 июня 2019

Я уверен, что есть более простой способ сделать это, но я бы поместил данные во фрейм данных, а затем использовал метод 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']]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...