2013-12-16 15 views
1

Мне может быть что-то очень простое здесь, но у меня есть функция, которая отображает гистограммы для определенного столбца из фреймворка 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 должно быть. Это не может быть строка, и она не может быть переменной, потому что я не знаю, как бы я ее определял. Я чувствую, что есть простой способ сделать это, которого я просто не вижу.

EDIT: добавление описания данных. Выход data.dtypes является

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

и мой индекс на datelatest_inactive колонке

+0

Не могли бы вы привести небольшой пример вашего фрейма данных (скажем, два или три очка за каждый месяц)? Всегда легче тестировать код, когда вы можете видеть, на что он должен действовать. – DSM

+0

Я не могу этого сделать, потому что данные содержат очень личную информацию. Я мог бы дать вам вывод data.dtypes, если это поможет – user1893354

+0

Фактические данные не имеют значения. Что-то, что мы можем скопировать и вставить, поэтому нам не нужно тратить время, издеваясь над нашим собственным примером, считается обычным (см. [SSCCE.org] (http://sscce.org)). – DSM

ответ

1

вы должны сделать:

data[column_name][rng6] 

data.column_name бы перевести data[ "column_name" ], который не то, что вы собираетесь

+0

Кадр данных индексируется столбцом datetime. Я попытался изменить первую гистограмму на 'data [column_name] [rng6] .hist (bins = [0,30,60,90,120,150,180,210,240,270,300]). Plot()', но он говорит: «Исключение: переиндексация действительна только с уникальными объектами индекса», – user1893354

Смежные вопросы