私は(初期インデックス0 ... 9999で)データフレームを撮影し、そのように今年で仕切られています:パンダインデックスが予期せずに動作します。df [df.indexを[0] => KeyError例外
requests_df = {year : df[df['req_year'] == year] for year in df['req_year'].unique()}
として、通常、各サブフレームはそれ自身のインデックス順序を保持する。その後、私はこれは本当に予期しない動作を取得これらの単離されたフレームの1つ(df_yr = requests_df[2015]
)上のインデックスにしようとしているとき:
for idx in df_year.index:
qty = frame[idx]['qty_tickets']
原因:私はイテレータにgoofed
KeyError Traceback (most recent call last)
/home/user/ve/ml/lib/python3.5/site-packages/pandas/indexes/base.py in get_loc(self, key, method, tolerance)
2133 try:
-> 2134 return self._engine.get_loc(key)
2135 except KeyError:
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4433)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4279)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13742)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13696)()
KeyError: 8666
思考を、私は単純なケースを試してみました:
df_yr[df_yr.index[0]]
KeyError
ワット。
8666は間違いなく最初の行のインデックス値である:私は正常に動作し、df.index値に依存してLOCを用い
Int64Index([8666, 8667, 8668, 8669, 8670, 8671, 8672, 8673, 8674, 8675,
...
9830, 9831, 9832, 9833, 9834, 9835, 9836, 9837, 9838, 9839],
dtype='int64', length=1174)
インデックス、
outframe.loc[8666]
。 wat。
df.ixはまた、内蔵のフォールバックを持っているとして、すぎ驚くべきことではないされ、動作します。
私は何の問題もなく、時間のdf.index数十の操作を使用して索引付けしました。何がありますか?
'qty = frame [idx] ['qty_tickets']'を 'qty = frame 'に変更してみてください。loc [idx、 'qty_tickets'] ' – jezrael
' df [i] 'は、デフォルトで列ラベルベースのインデックスを実行します。 'df.loc [i]'と 'df.ix [i]'の両方が行の索引付けを行います。 –
@IgorRaushあなたは私に私の方法のエラーを見せました!私は、 'df [2:4]'のようなスライスがうまくいくと思っていたので、単純な行を忘れてしまったので( 'df [' foo '] ==' bar ''stuff) dfが既にマスクされた後に索引付けが失敗します。これを回答として投稿しても構いませんか? – DeusXMachina