我试图执行以下操作:
In [11]: import itertools
In [12]: states = itertools.product(range(2), range(3))
In [13]: s = pd.Series(np.zeros(6), index=states)
In [14]: s.at[(0, 0)]
其中pd
和np
分别为pandas
和numpy
。但是,这会导致
ValueError:在非整数索引的基础索引上只能有非整数索引器
我无法从http://pandas.pydata.org/pandas-docs/version/0.15.0/indexing.html中弄清楚这有什么问题;据我了解,.at
在选择单个值时相当于.loc
,此处我将元组(0, 0)
作为索引传递。我怎样才能让它发挥作用? (我更喜欢使用pandas'优化方法at
/ loc
代替__getitem__
方法。
答案 0 :(得分:3)
在我看来,最好使用MultiIndex
并按loc
选择:
import itertools
states = list(itertools.product(range(2), range(3)))
s = pd.Series(range(6), index=pd.MultiIndex.from_tuples(states))
print (s)
0 0 0
1 1
2 2
1 0 3
1 4
2 5
dtype: int32
print (s.loc[(0, 0)])
0
编辑:
使用MultiIndex.from_product
的OP通过更好的解决方案:
s = pd.Series(range(6), index=pd.MultiIndex.from_product([range(2), range(3)]))
print (s)
0 0 0
1 1
2 2
1 0 3
1 4
2 5
dtype: int32
答案 1 :(得分:2)
脏黑客:
In [43]: s.loc[[(0,0)]].iat[0]
Out[43]: 0.0