Функция, использующая * args для отображения нескольких столбцов DataFrame в линейном графике - PullRequest
0 голосов
/ 06 мая 2019

Я хочу реализовать функцию в моем коде на 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 в этом отношении? Любая помощь высоко ценится. Спасибо.

1 Ответ

0 голосов
/ 06 мая 2019

Вы можете сделать это с помощью df.loc легко, без необходимости писать отдельную функцию.
Например. если вы хотите построить только первый и третий столбцы вашего примера dataframe:

cols = ['col1', 'col3']
df.loc[:, cols].plot()

должен сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...