Как написать функцию на Python, если переменные не были определены ранее?

#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] получить только первые два не работает. @Ananth

2. @HelpNeeded3 Сейчас я внес обновление в код. Код вернет только последний элемент, и вы сможете извлечь как можно больше элементов из списка тем же способом.