【问题标题】:How to create a new list per Excel row in python3如何在python3中为每个Excel行创建一个新列表
【发布时间】:2018-10-01 13:45:34
【问题描述】:

我有一张包含如图所示数据的 Excel 表格: Cisco Call Handlers

我正在使用 Python 3 并从此工作表中读取数据,以尝试为每一行构建一个列表。我尝试过使用熊猫和字典,现在我正在尝试 xlrd,因为我无法弄清楚这一点! 我目前有以下代码:

idx=1
i2 = 1 #skipping header row as that is where the keys are
list_of_values = []
for idx in range(sheet.nrows):
    row = sheet.row_values(idx)
    print(idx, row)
    idx += 1
    if idx == idx:
        for cell in row:
            list_of_values.append(sheet.row_values(i2))
print(list_of_values)#prints[['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'], ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3']]

代码打印如下:

0 ['DisplayName', '扩展名', 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] 1 ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'] 2 ['TestDisplayName3', 6230.0, '', 3030.0, '', 4578.0, '', '', '', '', '', '']

但在打印 list_of_values 时,它只会重复打印 idx 为 1 的行。 我希望这是有道理的。请帮忙,因为我显然是 Python 的初学者。我知道我的“list_of_variables”变量是错误的,因为我需要多个变量来存储我的每一行,对吧?有没有办法为excel表的每个列表/每行创建一个新变量来容纳适当的单元格?如: list_of_values1 = ['DisplayName', 'Extension', 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]. list_of_values2 = ['TestDisplayName2', 3091.0, '', 8645.0, '', '', '', '', '', 'Agent007', '', 'TestDisplayName3'] list_of_values3 = ['TestDisplayName3', 6230.0, '', 3030.0, '', 4578.0, '', '', '', '', '', '']

【问题讨论】:

  • 你真的想在 if 语句中比较 idx 和它自己吗?
  • 你的意思是excel文件的每一行吗?您能否在示例输入旁边详细说明示例输出?
  • 我不确定最好的方法,将 idx 与自身进行比较是我能想到的最好方法。所以理想情况下,如果 idx = 0,它将为第 1 行构建一个列表,如果 idx = 1,它将为第 2 行构建一个列表,依此类推。我将 idx 与自身进行了比较,因此第 0 行的数据不会进入第 1 行,反之亦然。
  • 三只是一个变量idx。所以这个条件永远都是真的,不是吗?

标签: python excel pandas xlrd


【解决方案1】:

这是你想要达到的目标吗?

values = dict()
for idx in range(1, sheet.nrows):
    values[idx] = sheet.row_values(idx)

for key, value in values.items():
    print(key, value)

这里每个值对应电子表格中的每一行。


原始回复

也许你打算写

        list_of_values.append(sheet.row_values(idx))

而不是

        list_of_values.append(sheet.row_values(i2))

【讨论】:

  • 如果我用 idx 替换 i2,它会显示“IndexError: list index out of range”。
  • 所以我知道我的“list_of_variables”变量是错误的,因为我需要多个变量来存储我的每一行,对吧?那么有没有办法为excel表的每个列表/每行创建一个新变量来容纳适当的单元格?
  • IndexError 在您尝试访问不存在的列表元素时出现。比如访问大小为 5 的列表的第 10 个元素。您可以尝试删除 idx += 1 语句并重试吗?
  • > 每行新变量?你想要一个dictionary
  • 谢谢,我会再用字典试试。对我来说,问题在于访问键的值,如下所示:stackoverflow.com/questions/52507860/…。我需要的 API 不能采用键/值对。
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 2018-07-27
  • 2015-05-01
  • 2020-01-15
  • 2017-09-15
相关资源
最近更新 更多