Pandas - 如何在函数中传递列名

时间:2013-12-16 14:59:27

标签: python pandas

我可能会遗漏一些非常简单的东西,但我有一个函数可以在某些时间范围内绘制Pandas数据帧中某列的直方图。在我的函数中,我想将列名作为参数传递。这是我到目前为止所做的。

def make_hist(data,column_name):

    start=datetime(2013,11,1)
    end=datetime(2013,11,30)
    rng=pd.date_range(start,end)

    start2=datetime(2013,10,1)
    end2=datetime(2013,10,30)
    rng2=pd.date_range(start2,end2)

    start3=datetime(2013,9,1)
    end3=datetime(2013,9,30)
    rng3=pd.date_range(start3,end3)


    start4=datetime(2013,8,1)
    end4=datetime(2013,8,30)
    rng4=pd.date_range(start4,end4)

    start5=datetime(2013,7,1)
    end5=datetime(2013,7,30)
    rng5=pd.date_range(start5,end5)


    start6=datetime(2013,12,1)
    end6=datetime(2013,12,30)
    rng6=pd.date_range(start6,end6)

    plt.subplot(611)
    data.ix[rng6].column_name.hist(bins=[0,30,60,90,120,150,180,210,240,270,300]).plot()
    plt.title('December')
    plt.ylim(0,300)
    plt.xlim(0,300)
    plt.subplot(612)
    data.ix[rng].column_name.hist(bins=[0,30,60,90,120,150,180,210,240,270,300]).plot()
    plt.title('November')
    plt.ylim(0,300)
    plt.xlim(0,300)
    plt.subplot(613)
    data.ix[rng2].column_name.hist(bins=[0,30,60,90,120,150,180,210,240,270,300]).plot()
    plt.title('October')
    plt.ylim(0,300)
    plt.xlim(0,300)
    plt.subplot(614)
    data.ix[rng3].column_name.hist(bins=[0,30,60,90,120,150,180,210,240,270,300]).plot()
    plt.title('September')
    plt.ylim(0,300)
    plt.xlim(0,300)
    plt.subplot(615)
    data.ix[rng4].column_name.hist(bins=[0,30,60,90,120,150,180,210,240,270,300]).plot()
    plt.title('August')
    plt.ylim(0,300)
    plt.xlim(0,300)
    plt.subplot(616)
    data.ix[rng5].column_name.hist(bins=[0,30,60,90,120,150,180,210,240,270,300]).plot()
    plt.title('July')
    plt.ylim(0,300)
    plt.xlim(0,300)
    plt.show()

问题是我不知道参数column_name应该是什么数据类型。它不能是一个字符串,它不能只是一个变量,因为我不知道如何定义它。我觉得有一种简单的方法可以做到这一点,我只是没有看到。

编辑:添加数据帧的描述。 data.dtypes的输出是

account                             int64
first_active                       object
datelatest_inactive        datetime64[ns]
days_active                         int64
dtype: object

我的索引位于datelatest_inactive

1 个答案:

答案 0 :(得分:1)

你应该这样做:

data[column_name][rng6]

data.column_name会转换为data[ "column_name" ],这不是您想要的