データフレームのスライス使用時の注意
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 件のコメント:
コメントを投稿