我有一个包含两列短语的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'), ...]
我能做些什么呢?
您可以使用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
。
希望有所帮助!
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)
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。
因此,您可以使用Pandas数据框架非常容易地读取和处理Excel文件。下面的解决方案实际上将产生一个列表的列表。希望它能有所帮助。这是我在StackOverflow上的第一个回答,而且我不是最有经验的程序员。^^
df = pd.read_excel (r'PathOfExcelFile.xlsx')
print (df)
mylist = [df.columns.values.tolist()] + df.values.tolist()
print (mylist)
list
是 Python 中的保留关键字,您不能将 list
用作变量名称。而且你的解决方案并不完整。 - Avishka DambawinnaFalse
、None
、True
、and
、as
、assert
、async
、await
、break
、class
、continue
、def
、del
、elif
、else
、except
、finally
、for
、from
、global
、if
、import
、in
、is
、lambda
、nonlocal
、not
、or
、pass
、raise
、return
、try
、while
、with
、yield
。它们在Python2中有所不同,例如print
是一个关键字(现在不再是了)。 - rizerphe导入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
参数中使用None
。 header=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
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')]
Nick
和'我去上学
之间有一个括号? - Alexandre B.