我有一堆使用元组作为索引的Pandas代码。我最近遇到了使用DataFrame.ix
访问DataFrame的单个元素的需要,这会被元组混淆。它似乎认为我的元组是我想要访问的一系列键,而不是我想要访问的单个键(恰好是一个序列)。如何提取元组为关键字的单个行?
也许这是一个警告故事,不要在Pandas索引中使用序列,但在我的情况下,为时已晚。
import string, pandas as pd, numpy as np
bar = pd.DataFrame(np.random.random((8,2)))
bar.columns = ['col1', 'col2']
bar.index = list(string.ascii_lowercase)[:8]
print bar
print bar.iloc[0].name
print bar.ix[bar.iloc[0].name]
bar.index = [tuple(list(string.ascii_lowercase)[i:i+3]) for i in range(8)]
print bar.iloc[0].name
print bar.ix[bar.iloc[0].name] # Fails with `KeyError: 'a'`
答案 0 :(得分:6)
您可以将元组包装在列表中以使其正常工作。
In [17]: bar.ix[[bar.iloc[0].name]]
Out[17]:
col1 col2
(a, b, c) 0.216689 0.262511
答案 1 :(得分:3)
我认为不可能使用索引编制,但您可以使用xs
执行此操作:
>>> bar.xs(bar.iloc[0].name)
col1 0.864788
col2 0.708136
Name: (a, b, c), dtype: float64