2015-08-21 69 views
2

我有一個數據幀,看起來像這樣: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在你的DF的方法,它返回的方差:

In [132]: 
df.var() 

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

由於這種方法並不可迭代所以基本上你的列名相同的方法名稱,這樣,試圖訪問的方法名接受屬性優先避免含糊不清使用方括號df['var']

+0

啊哈!很高興知道,我只是從熊貓開始,還不知道哪些名字不適用。謝謝! – user3063381

+2

我強烈建議您**總是**使用方括號訪問您的列,如果您嘗試以屬性的方式訪問,則會出現很多疑難解答 – EdChum