如何将给定的 Excel 文件转换为 Python 中的字典?

Posted

技术标签:

【中文标题】如何将给定的 Excel 文件转换为 Python 中的字典?【英文标题】:How to convert the given Excel file to a dictionary in Python? 【发布时间】:2021-07-01 20:30:14 【问题描述】:

Excel数据格式:

文件,转换为 csv,内容如下:

'Details': 0: 'Mickey',
  1: nan,
  2: nan,
  3: nan,
  4: 'Doland',
  5: nan,
  6: nan,
  7: nan,
 'Unnamed: 1': 0: 'Mouse',
  1: nan,
  2: nan,
  3: nan,
  4: nan,
  5: nan,
  6: nan,
  7: nan,
 'Unnamed: 2': 0: 'Address1',
  1: 'city',
  2: 'street',
  3: 'hno',
  4: 'adress1',
  5: 'city',
  6: 'street',
  7: 'hno',
 'Unnamed: 3': 0: nan, 1: 'xxx', 2: 2, 3: 22, 4: nan, 5: 'zzz', 6: 3, 7: 33,
 'Unnamed: 4': 0: 'address2',
  1: 'city',
  2: 'street',
  3: 'hno',
  4: 'address2',
  5: 'city',
  6: 'street',
  7: 'hno',
 'Unnamed: 5': 0: nan, 1: 'yyy', 2: 3, 3: 33, 4: nan, 5: 'www', 6: 4, 7: 44

如何将附加的 Excel 转换为 Python 中的字典?

预期的字典:

dict1 ='Details':[['Mickey','Mouse','Address1': 'city': 'xxx', 'Street': '2', 'hno': '22',
                    'Address2': 'city': 'yyy', 'Street': '3', 'hno': '33'],
                   ['Doland','Duck','Address1': 'city': 'xxx', 'Street': '2', 'hno': '22',
                    'Address2': 'city': 'yyy', 'Street': '3', 'hno': '33']]

【问题讨论】:

能否将excel数据转换成csv并在问题部分发布记录? 您的数据有问题。 docs.google.com/spreadsheets/d/… 【参考方案1】:

这是我能想到的最糟糕的解决方案:

df = pd.read_excel('samp.xlsx', header=[0], 
                   index_col=[0,1])
d = 'details': []
for i, grp in df.groupby('Details'):
    grp = (grp.T.ffill().T)
    grp.columns = grp.iloc[0]
    grp = grp[1:].T
    name = ', '.join(grp.index.name)
    val = grp.groupby(grp.index).apply(lambda x: dict(zip(x.iloc[0], x.iloc[1]))).to_dict()
    final_val = ([name,val])
    d['details'].append(final_val)

d:

'details': [['Donald, Duck',
   'Address1': 'City': 'zzz', 'Street': 3, 'hno': 33,
    'Address2': 'City': 'www', 'Street': 4, 'hno': 44],
  ['Mickey, Mouse',
   'Address1': 'City': 'xxx', 'Street': 2, 'hno': 22,
    'Address2': 'City': 'yyy', 'Street': 3, 'hno': 33]]

我已经在评论区发布了excel文件的链接。

基本上,我对每个按名称访问每个组(米老鼠和唐老鸭)使用 z 循环,然后我对其应用操作。

对不起,我着急稍后会添加解释。如果您在理解事情上有困难,请告诉我。

这个月牙:

grp.T.ffill().T 

将帮助我用 Address1/Address2 填充 nan 值。这就是我转置它然后使用ffill的原因。

之后,我想将每个组的起始行作为列。 一旦这一步完成。我的第一行将是关键,第二行将是我的价值。所以我将它们压缩在一起并创建了一本字典。希望这可以帮助您更好地理解逻辑。

【讨论】:

感谢您的出色解决方案!它有效,但我无法理解 for 循环中的前 3 行 grp = (grp.T.ffill().T) grp.columns = grp.iloc[0] grp = grp[1:].T 你能更详细地了解这些步骤吗?并在您有时间时提供您的最佳解决方案版本。 @speed0001:还要检查图像。我已经添加了解释。请在每一步打印输出。【参考方案2】:
import xlrd
from xlrd import open_workbook

fp = tempfile.NamedTemporaryFile(delete= False, suffix=filetype)
fp.write(binascii.a2b_base64(selected file))
workbook = xlrd.open_workbook(file name)
sheet = workbook.sheet_by_name(sheet name)
row = [c or '' for c in sheet.row_values(header_row)]
first_row = [] 
 for col in range(sheet.ncols):
    first_row.append(sheet.cell_value(0,col) )
archive_lines = []
   for row in range(1, sheet.nrows):
      elm = 
      for col in range(sheet.ncols):
         elm[first_row[col]]=sheet.cell_value(row,col)
      archive_lines.append(elm)

【讨论】:

添加一些解释这段代码的作用。 此代码将整个 excel 文件作为字典读取 你能写一个工作代码吗?这似乎很有趣。我想玩这个代码。我以前从未在 xlrd 上工作过。 是的,我已经使用此代码将数据从 excel 文件导入 python 字典

以上是关于如何将给定的 Excel 文件转换为 Python 中的字典?的主要内容,如果未能解决你的问题,请参考以下文章

unotools - 尝试使用 python 将 ods 或 excel 文件转换为 csv

如何在 Python 中将 Azure Blob 文件 CSV 转换为 Excel

如何将 Python 列表转换为 pandas DataFrame 或 excel 文件输出,具体要求如下:

Laravel:如何将 Excel 文件存储在给定的路径中?

使用 Python 将 Excel 转换为 JSON,如何根据需要格式化这些数据?

如何使用python将excel文件中的时间戳列表从UTC转换为旧金山时间(太平洋时间)? [复制]