データフレームのスライス使用時の注意
pd.__version__: 2.1.4
データフレームを使用していたらスライスが使えない現象が出ました。
import numpy as np import pandas as pd # float型のインデックス ind = [1.0, 2.0, 3.0] df = pd.DataFrame({ "col1": ["A", "B", "C"], "col2": [11, 22, 33] }, index=ind) print(df) # ここでワーニング print(df[1:2])
col1 col2
1.0 A 11
2.0 B 22
3.0 C 33
内容としては
FutureWarning: The behavior of obj[i:j] with a float-dtype index is deprecated. In a future version, this will be treated as positional instead of label-based. For label-based slicing, use obj.loc[i:j] instead
のワーニングが出てスライスが出来ません。
ワーニングの内容によると、float-dtype のインデックスは今後使えなくなるそうです。
代替としてobj.loc[i:j]で指定してくださいとあります。
ただし、floatのままだと処理が遅くなるようなので根本的に解決するならint型に直したほうがよさそうです。
直接インデックスの型を変えられない様なので、一旦インデックスを解除し、型をintに変更してからまた振り直します。
# インデックスの解除 df.reset_index(inplace=True) # 型をindexに変更 df2 = df.astype({"index": int}) # インデックスの振り直し df2.set_index("index", inplace=True) print(df2) print(df2.dtypes)
col1 col2
index
1 A 11
2 B 22
3 C 33
col1 object
col2 int64
dtype: object
これでスライスも使えるようになります。
0 件のコメント:
コメントを投稿