web-dev-qa-db-ja.com

通常の列のようにPandasインデックスにアクセスする

私はPandas名前付きインデックスを持つDataFrameを持っています。DataFrame、列名、および他のいくつかのものを取り、一連の作業を行うコードから分離されたコードにそれを渡したいです。その列に関係します。この場合のみ強調したい列はインデックスですが、通常の列のようにインデックスを抽出できないため、このコードにインデックスのラベルを付けることはできません。たとえば、次のようにDataFrameを作成できます。

import pandas as pd, numpy as np

df=pd.DataFrame({'name':map(chr, range(97, 102)), 'id':range(10000,10005), 'value':np.random.randn(5)})
df.set_index('name', inplace=True)

結果は次のとおりです。

         id     value
name                 
a     10000  0.659710
b     10001  1.001821
c     10002 -0.197576
d     10003 -0.569181
e     10004 -0.882097

name列にアクセスするにはどうすればよいですか?

print(df.index)  # No problem
print(df['name'])  # KeyError: u'name'

列の複製やインデックスの変更などの回避策があることは知っています。しかし、インデックスを他のすべてと同じように処理する何らかの形式の列アクセスなど、よりクリーンなものはありますか?

9
kuzzooroo

インデックスはパンダで特別な意味を持っています。特定の操作を最適化するために使用され、データのマージ/結合などのさまざまな方法で使用できます。したがって、選択を行います。

  • 「別の列」の場合は、reset_indexを別の列として扱います。
  • 本当にインデックス作成に使用されている場合は、インデックスとして保持し、df.index

この選択はできません。これは、基礎となるデータの構造と、データの分析方法に依存する必要があります。

データフレームインデックスの使用の詳細については、以下を参照してください。

4
jpp

reset_indexを使用する代わりに、インデックスを通常の列にコピーし、いくつかの作業を行ってから列を削除することもできます。次に例を示します。

df['tmp'] = df.index
# do stuff based on df['tmp']
del df['tmp']
1
Ian Ash