来自ExcelPython的字典

来自ExcelPython的字典,python,Python,给定一个可以有1个或多个列的excell: 汽车颜色 奥迪黄色 马自达蓝 丰田红 创建一个字典,该字典的键为列中的第一个元素,值为包含其余元素的列表及其在输出时返回的值: {'Cars':['Audi','Mazda','Toyota'], Colors':['yellow','blue','red']} 我想到的只是一个附加了所有束/行的列表,我不知道如何从一开始就将其作为字典 def readExcelData(): tempDict = defaultdict(dict)

给定一个可以有1个或多个列的excell:

汽车颜色
奥迪黄色
马自达蓝
丰田红

创建一个字典,该字典的键为列中的第一个元素,值为包含其余元素的列表及其在输出时返回的值:

{'Cars':['Audi','Mazda','Toyota'],
  Colors':['yellow','blue','red']}
我想到的只是一个附加了所有束/行的列表,我不知道如何从一开始就将其作为字典

 def readExcelData():
    tempDict = defaultdict(dict)
    tag_rowlst = []

    from openpyxl import load_workbook
    book = load_workbook(pkg_resources.resource_filename(__name__, 'input_data.xlsx'))
    sheet = book['Sheet1']

    print(sheet.max_column)
    for j in range(0, sheet.max_column):
        for row in sheet.rows:
            if type(row[j].value) is str:
                tag_rowlst.append(row[j].value)
                #print(type(row[1].value))

    print(tag_rowlst)

这会给你你的字典

这对熊猫来说更容易

n [63]: df = pd.read_excel("a.xlsx")

In [64]: df
Out[64]:
     Cars  Colors
0    Audi  yellow
1   Mazda    blue
2  Toyota     red

In [73]: {col:list(df[col]) for col in df.columns}
Out[73]: {'Cars': ['Audi', 'Mazda', 'Toyota'], 'Colors': ['yellow', 'blue', 'red']}
不打印
NaNs

In [130]: df = pd.read_excel("a.xlsx")

In [131]: df
Out[131]:
     Cars  Colors
0    Audi  yellow
1   Mazda    blue
2  Toyota     NaN

In [132]: {col:list(df[df[col].notnull()][col]) for col in df.columns}
Out[132]: {'Cars': ['Audi', 'Mazda', 'Toyota'], 'Colors': ['yellow', 'blue']}

您可以将字典理解与转置数据表结合使用,转置数据表可通过以下途径获得:df.T

非常干净高效,但这将为您提供:{'Cars':{0:'Audi',1:'Mazda',2:'Toyota'},'Colors':{0:'yellow',1:'blue',2:'red red'},这还不是所需的输出。使用
df to_dict('list'))
在不使用index.df.to_dict(orient=“list”)的情况下获得精确的dict是的,这工作起来很有魅力,当列不规则时,有没有办法删除nan类型的元素?就像“颜色”列只有一种颜色一样,它会自动用名为“nan”的东西填充列表,即float作为类型。
In [130]: df = pd.read_excel("a.xlsx")

In [131]: df
Out[131]:
     Cars  Colors
0    Audi  yellow
1   Mazda    blue
2  Toyota     NaN

In [132]: {col:list(df[df[col].notnull()][col]) for col in df.columns}
Out[132]: {'Cars': ['Audi', 'Mazda', 'Toyota'], 'Colors': ['yellow', 'blue']}
import pandas as pd
df = pd.read_excel(r"test.xlsx")
your_dict = {col:lst for (col, lst) in zip(df.columns, df.T.values.tolist())}