簡體   English   中英

從 Excel 中提取兩列並將鍵值對附加到字典中

[英]Pull two columns from Excel and append key value pairs to dictionary

如果有人問過類似的問題,我深表歉意——我挖掘了很多,但它們與我的具體問題不符。

基本上,我有一個包含 2 列的 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: 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"
}

試試這個使用 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)

我確信有一種更簡單的方法可以做到,但我會將數據放入數據框中,然后使用 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']]

然后只選擇姓名和電子郵件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM