从Excel表格转换为元组列表

10

我有一个包含两列短语的Excel (.xlsx)文件。例如:

John  I have a dog     
Mike  I need a cat
Nick  I go to school

我想在Python中导入它,并获得像这样的元组列表:

[('John', 'I have a dog'), ('Mike', 'I need a cat'), ('Nick', 'I go to school'), ...]

我能做些什么呢?


你尝试过什么吗?为什么在Nick'我去上学之间有一个括号? - Alexandre B.
那是一个错误,谢谢,我已经纠正了。我尝试使用pandas,但我得到的是一个数据框而不是元组列表。 - Gigi Russo
6个回答

5

您可以使用pd.read_excel读取Excel文件。如果有标题,您需要注意它是否存在。

正如您所说,它返回一个数据框。在我的情况下,我有以下内容。

df = pd.read_excel("data.xlsx")
print(df)
#         name         message
# 0       John    I have a dog
# 1       Mike    I need a cat
# 2       Nick  I go to school

接下来,可以使用to_numpy方法获取DataFrame的值,并返回一个numpy数组。

如果您需要将其转换为列表,则可以使用numpy方法tolist将其转换为list形式:

out = df.to_numpy().tolist()
print(out)
# [['John', 'I have a dog'],
#  ['Mike', 'I need a cat'],
#  ['Nick', 'I go to school']]

如你所见,输出结果是一个列表嵌套另一个列表。如果你希望得到一个元组的列表,只需进行类型转换:

# for getting list of tuples
out = [tuple(elt) for elt in out]
print(out)
# [('John', 'I have a dog'), 
#  ('Mike', 'I need a cat'), 
#  ('Nick', 'I go to school')]

注意: 一个较旧的解决方案是调用 values 而不是 to_numpy()。 然而,文档明确建议使用 to_numpy 并原谅 values

希望有所帮助!


4
你可以使用openpyxl
import openpyxl

wb = openpyxl.load_workbook('test.xlsx')

ws = wb.active
cells = ws['A1:B3']

l = []
for c1, c2 in cells:
    l.append((c1.value, c2.value))

print(l)

4
import pandas as pd    
file_path = r'filepath.xlsx'
xlsx = pd.read_excel(file_path)
names = xlsx.names    
scores = xlsx.scores    
my_list = [(name, score) for name in names for score in scores]   
print(my_list)

您需要修改file_path、name和score。 此外,如果您之前没有导入过pandas,则需要先在终端中执行pip install pandas。


4

因此,您可以使用Pandas数据框架非常容易地读取和处理Excel文件。下面的解决方案实际上将产生一个列表的列表。希望它能有所帮助。这是我在StackOverflow上的第一个回答,而且我不是最有经验的程序员。^^

df = pd.read_excel (r'PathOfExcelFile.xlsx')
print (df)
mylist = [df.columns.values.tolist()] + df.values.tolist()
print (mylist)

https://datatofish.com/read_excel/

https://datatofish.com/convert-pandas-dataframe-to-list/


1
list 是 Python 中的保留关键字,您不能将 list 用作变量名称。而且你的解决方案并不完整。 - Avishka Dambawinna
@AvishkaDambawinna,你肯定可以。这是一个类名。Python关键字(至少对于3.7.3)包括:FalseNoneTrueandasassertasyncawaitbreakclasscontinuedefdelelifelseexceptfinallyforfromglobalifimportinislambdanonlocalnotorpassraisereturntrywhilewithyield。它们在Python2中有所不同,例如print是一个关键字(现在不再是了)。 - rizerphe
1
@БогданОпир,当然,你可以将它们用作变量名,但在编程中这并不是一个好的实践。 - Avishka Dambawinna

4
您需要安装导入pandas,并需要安装xlrd模块。
pip install pandas
pip install xlrd

然后
import pandas as pd

df = pd.read_excel("dataset.xlsx", header=None)   #header=None means no header
mylist = list(map(tuple, df.to_numpy()))
#output
#[('John', '  I have a dog     '), ('Mike ', ' I need a cat'), ('Nick ', ' I go to school')]

解释:

.read_excel 将把 Excel 文件读入 Pandas 数据帧。

df = pd.read_excel("filename.xlsx", header = None)

#        0                1
# 0  John        I have a dog
# 1  Mike        I need a cat
# 2  Nick        I go to school

如果没有标题,则在header参数中使用Noneheader=None

如果存在标题,则...

df = pd.read_excel("filename.xlsx")

#     Name        Status     <-headers
# 0  John     I have a dog
# 1  Mike     I need a cat
# 2  Nick     I go to school

to_numpy() 将DataFrame转换为NumPy数组。使用map函数,将每个项作为参数(tuple())发送到函数中,以将每组行转换为元组。

mylist = list(map(tuple, df.to_numpy()))

参考: pandas.read_excel, map


0
我会使用Pandas的to_records函数,将DataFrame转换为NumPy记录数组。
import pandas as pd

df = pd.read_excel("db.xlsx", sheet_name="test", header=None)
results = list(df.to_records(index=False))

>>> print(results)
[('John', 'I have a dog'), ('Mike', 'I need a cat'), ('Nick', 'I go to school')]

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