#python #pandas #list #function
#python #pandas #Список #функция
Вопрос:
Без написания функции я получаю правильный вывод из этого:
import pandas as pd
df = pd.read_csv('data.csv', header=none) # Opens the CSV file
df2 = df.values.tolist() # Transforms rows into lists
print(df2)
Выход:
[[434, 324, 324], [6324, 3274, 3433]]
Тем не менее, я пытаюсь написать функцию, которая будет делать то же самое (открывает файл и возвращает значения в списке).
Я пытался:
def retrieve_data(*args):
df = pd.read_csv('data.csv', header=none)
df2 = df.values.tolist()
return df2
retrieve_data(df2)
Но это возвращает ошибку, которая df2
не была определена.
Как я могу отредактировать функцию, чтобы она открывала данные и сохраняла значения в виде списка df2
?
Комментарии:
1. Я не понимаю, зачем вам это вообще нужно
2. Определите функцию, которая не принимает параметр (и вызовите ее без него). Параметр (
args
) все равно не используется.3. @MichaelButscher такого рода работы, например
retrieve_data(df2)
, возвращает весь список. Но, если я захочу сделать, напримерretrieve_data(df2[1])
, чтобы получить этот элемент, это не сработает. Есть идеи, как это включить?4. Вы можете либо указать только аргумент
1
as и обработать его в функции, либо выбрать элемент после вызова функции.5. В первых строках опубликованного вами кода вы присваиваете результат функции (например
tolist()
) переменной. Почему бы вам не сделать то же самое со своей собственной функцией?
Ответ №1:
Проблема в том, что df2 не нужен при вызове функции, поскольку он не определен в этот момент. Итак, я внес некоторые изменения в работающий код.
import pandas as pd
def retrieve_data():
df = pd.read_csv('./test.csv', header=None)
df2 = df.values.tolist()
return df2
lst = retrieve_data()
print(lst[:1]) #print only part of list as needed
Комментарии:
1. Спасибо. Из любопытства, как вы могли бы вернуть, например, первые два элемента из списка? В моем примере я показал только два списка, но на самом деле их много. Использование
print(retrieve_data())
печатает их все, иprint(retrive_data[:1]
получить только первые два не работает. @Ananth2. @HelpNeeded3 Сейчас я внес обновление в код. Код вернет только последний элемент, и вы сможете извлечь как можно больше элементов из списка тем же способом.