我想使用* args在我的python代码中实现一个功能。它应该能够使用作为参数传递的数据框的列来根据所选内容绘制线图。
让我们说我有一个像这样的DataFrame:
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")
因为我有一个包含30多个包含值的列的大型DataFrame,所以我很高兴拥有一个可以对列进行变量选择以在线图中绘制其值的函数。
因此,我发现* 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的概念?非常感谢您的帮助。谢谢。
答案 0 :(得分:0)
您可以使用df.loc
轻松地做到这一点,而不必编写单独的函数。
例如。如果您只想绘制示例数据框的第一和第三列:
cols = ['col1', 'col3']
df.loc[:, cols].plot()
应该做。