2015-08-21 18 views
2

У меня есть dataframe, который выглядит следующим образом:Python Панда: объект instancemethod не является итерацией

 id  ttp   var cap_util  wip 
0 ADLL 3.333333 6.003725e-28 0.327531 3.258475 
1 ADLM 2.000000 0.000000e+00 0.197834 1.970107 
2 ADLH 1.428571 1.012494e-28 0.140841 1.407658 
3 ADML 2.631579 1.012897e-28 0.868789 8.640131 
4 ADMM 1.724138 7.889188e-28 0.567057 5.689792 
5 ADMH 1.369863 5.961075e-28 0.453626 4.528798 
6 ADHL 1.923077 1.014326e-28 0.951970 9.513957 
7 ADHM 1.538462 1.437187e-29 0.762675 7.625510 
8 ADHH 1.282051 1.974665e-29 0.635893 6.372434 
9 ASLL 5.041522 2.684441e+01 0.345550 5.104609 
10 ASLM 2.351336 5.567464e+00 0.175023 2.034605 
11 ASLH 1.775086 3.101865e+00 0.153913 1.872913 
12 ASML 12.662366 1.565324e+02 0.818762 38.526489 
13 ASMM 3.754160 1.401226e+01 0.577600 12.223828 
14 ASMH 2.358363 5.185841e+00 0.438072 7.880536 
15 ASHL 14.769186 2.008306e+02 0.865977 65.487920 
16 ASHM 6.829864 5.845502e+01 0.733780 32.611342 
17 ASHH 3.725520 1.640096e+01 0.600177 18.561905 

И я хочу, чтобы создать списки из четырех колонн, так что я следующее:

ttp = list(dataframe.ttp) 
cap_util = list(dataframe.cap_util) 
wip = list(dataframe.wip) 
var = list(dataframe.var) 

Он отлично работает для всех из них, кроме вар, для которых я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "07_corrplot_var_physics.py", line 34, in <module> 
    all_var = list(master_df.var) 
TypeError: 'instancemethod' object is not iterable 

Почему это га ошибки ppen и как я могу это исправить?

ответ

2

Вы можете просто использовать tolist():

In [128]: 
df['var'].tolist() 

Out[128]: 
[6.0037249999999998e-28, 
0.0, 
1.012494e-28, 
1.0128969999999999e-28, 
7.8891880000000005e-28, 
5.9610749999999994e-28, 
1.0143259999999999e-28, 
1.437187e-29, 
1.9746649999999998e-29, 
26.844409999999996, 
5.5674640000000002, 
3.1018650000000001, 
156.5324, 
14.012260000000001, 
5.1858409999999999, 
200.8306, 
58.455019999999998, 
16.400960000000001] 

ошибка возникает из-за var атрибутом слежки вашего столбца, например, это работает:

In [130]: 
list(df['var']) 

Out[130]: 
[6.0037249999999998e-28, 
0.0, 
1.012494e-28, 
1.0128969999999999e-28, 
7.8891880000000005e-28, 
5.9610749999999994e-28, 
1.0143259999999999e-28, 
1.437187e-29, 
1.9746649999999998e-29, 
26.844409999999996, 
5.5674640000000002, 
3.1018650000000001, 
156.5324, 
14.012260000000001, 
5.1858409999999999, 
200.8306, 
58.455019999999998, 
16.400960000000001] 

Лучше использовать квадратные скобки [] доступ ваши столбцы, а не как атрибут, чтобы избежать таких осложнений, как этот

var является методом на вашем Д.Ф., он возвращает дисперсию:

In [132]: 
df.var() 

Out[132]: 
ttp   14.897950 
var   3313.733384 
cap_util  0.071927 
wip   278.553319 
dtype: float64 

В качестве таких методов не Iterable так, по существу ваше имя колонки такого же, как имя методы так, пытаясь получить доступ как атрибут имя методы принимает чтобы избежать двусмысленности использования квадратных скобок df['var']

+0

Aha! Хорошо знать, что я только начинаю с панд и еще не знаю, какие имена не использовать. Спасибо! – user3063381

+2

Я настоятельно рекомендую вам ** всегда ** получать доступ к столбцам, используя квадратные скобки, есть много ошибок, если вы пытаетесь получить доступ как атрибут – EdChum

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