Я хочу реализовать функцию в моем коде на Python, используя * args. Он должен иметь возможность использовать столбцы фрейма данных, переданные в качестве аргументов, для построения линейного графика из выбранного.
Допустим, у меня есть такой фрейм данных:
import numpy as np
import pandas as pd
x = range(10)
data1 = np.random.randint(0, 100, 10)
data2 = np.random.randint(0, 100, 10)
data3 = np.random.randint(0, 100, 10)
df = pd.DataFrame({"col1": data1, "col2": data2, "col3": data3}, index = x)
Простой, но негибкий способ получить определенное количество аргументов, передаваемых функции:
%matplotlib inline
def showlineplot(df, x, y, z):
x = df[x]
y = df[y]
z = df[z]
df2 = pd.DataFrame({'x': x, 'y': y, 'z': z})
df2.plot()
return
showlineplot(df, "col1", "col2", "col3")
Поскольку у меня большой DataFrame с более чем 30 столбцами, содержащими значения, я был бы очень рад иметь функцию, которая может сделать переменный выбор столбцов для отображения их значений на линейном графике.
Поэтому я нашел, что * args хорошо использовать в функции для построения графиков, и сделал:
def showlineplot(df, *args):
newdf = pd.DataFrame()
for arg in args:
for i in range(len(args)):
i = df[arg]
newdf.append(i)
newdf.plot()
showlineplot(df, "col1", "col2")
Я обнаружил 2 ошибки:
во-первых, newdf создает фактические столбцы df в виде строк, а индекс теперь используется в столбцах. Это делает невозможным заговор.
во-вторых, используемый внутренний цикл for создает проблему. Я поместил его, потому что моя предыдущая попытка
for arg in args:
arg = df[arg]
newdf = pd.DataFrame({str(arg): arg})
показывает, что мне нужна итерация, чтобы связать различные df[args]
с.
У кого-то есть идея получше или вы можете мне помочь с концепцией args в этом отношении? Любая помощь высоко ценится. Спасибо.