将Excel列提取到Python数组中

6

我希望能够将Excel的列(而不是行)提取成Python的数组。这些数组必须是数组,而不是字典。

Excel文件看起来像这样:

     A    B    C
1   123  534  576
2   456  745  345
3   234  765  285

我希望以以下格式将其引入Python:

[[123,534,576],[456,745,345],[234,765,285]]

我该如何做到这一点?谢谢。

请查看xlrd包。 - wnnmaw
@wnnmaw 我试过了,也看了numpy的文档,但是不知道如何处理列。我只能处理行。 - user1681664
可能是将Excel文件加载到numpy 2D数组中的重复问题。 - seikichi
1
肯定的是,列应该是:[[123, 456, 234], [534, 745, 765], [576, 345, 285]] - 无论如何,使用 xlrdrow_valuescol_values - 文档相当简单易懂... - Jon Clements
术语问题:您说“数组的数组”,但涉及Python时,人们称为“数组”的几件事情。标准库有一种称为“array”的类型;流行的numpy库有一个ndarray类型,有时拼写为“array”;初学者有时将Python list称为数组。看起来您想要一个列表的列表。 - DSM
显示剩余2条评论
6个回答

13

这里是一个更简单的方法:

import xlrd
book = xlrd.open_workbook('your.xlsx')
sheet = book.sheet_by_name('example')
data = [[sheet.cell_value(r, c) for c in range(sheet.ncols)] for r in range(sheet.nrows)]
# Profit !
print(data)

如果您能够添加如何从data检索特定单元格值,那将非常好。 - Zac1

2

如果您正在遵循以上评论并研究xlrd包,那么可以尝试这个方法,看看是否有效?

(基于我在这里找到的内容:http://www.youlikeprogramming.com/2012/03/examples-reading-excel-xls-documents-using-pythons-xlrd/)

import xlrd
workbook = xlrd.open_workbook('my_workbook.xls')
worksheet = workbook.sheet_by_name('Sheet1')
num_rows = worksheet.nrows - 1
curr_row = 0

#creates an array to store all the rows
row_array = []

while curr_row < num_rows:
    row = worksheet.row(curr_row)
    row_array += row
    curr_row += 1

print(row_array)

它也适用于Excel 2010吗?文件类型是“xlsx”还是“xlsm”? - Marichyasana
好问题。老实说我不确定。 - David B.

1
使用xlrd逐行加载数据,然后使用zip进行转置。
>>> 
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> zip(*a)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> 

使用xlrd逐行加载数据,创建一个numpy数组,然后将其转置。
>>> import numpy
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> z = numpy.array(a)
>>> z
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> z.transpose()
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])
>>>

0
import csv
array = []
with open(* insert file directory here*) as fin:
     reader = csv.reader(fin)
     rows = [row for row in reader]
     for row in rows:
        j = 0
        arr = []
        for i = 0 < 3:
          arr[i] = row[i]
        array[j] = arr
        j = j + 1

0

我想通了。

import csv
cr = csv.reader(open("temp.csv","rb"))
arr = range(100)  # adjust to needed
x = 0
for row in cr:    
    arr[x] = row
    x += 1

print(arr[:22])  # adjust to needed

0
import csv

csv_rows = csv.reader(open("temp.csv","r"))
result_array = []
for row_index, row in enumerate(csv_rows):   
    if row_index != 0: #to neglect column names row
        result_array.append(row)
print(result_array)

3
嗨,Tushar。即使只有简短的说明,请您在所有回答中添加一个解释。此外,这个问题已经有很多答案了。为什么我们还需要另一个答案?没有解释为什么应该考虑这个解决方案而不是其他解决方案。如何回答。谢谢。 - Elletlar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接