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