Из Excel в список кортежей - PullRequest
9 голосов
/ 08 мая 2020

У меня есть файл 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'), ...]

Что я могу сделать?

Ответы [ 5 ]

5 голосов
/ 08 мая 2020

Вы можете прочитать файл Excel, используя pd.read_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. Он возвращает массив 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 голосов
/ 08 мая 2020

Вы можете использовать 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 и необходимо установить 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

Используйте None для параметра header, если заголовка нет. 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

4 голосов
/ 08 мая 2020

Итак, вы можете использовать кадры данных 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/

4 голосов
/ 08 мая 2020
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, имя и счет. Кроме того, если вы не импортировали pandas раньше, вам нужно сначала выполнить pip install pandas в терминале

...