Loading [MathJax]/extensions/tex2jax.js

2024年7月3日水曜日

pandasのスライスが使えないエラー

データフレームのスライス使用時の注意

pd.__version__: 2.1.4

データフレームを使用していたらスライスが使えない現象が出ました。

  1. import numpy as np  
  2. import pandas as pd  
  3.   
  4. # float型のインデックス  
  5. ind = [1.02.03.0]  
  6.   
  7. df = pd.DataFrame({  
  8.     "col1": ["A""B""C"],  
  9.     "col2": [112233]  
  10. }, index=ind)  
  11.   
  12. print(df)  
  13.   
  14. # ここでワーニング  
  15. 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に変更してからまた振り直します。


  1. # インデックスの解除  
  2. df.reset_index(inplace=True)  
  3.   
  4. # 型をindexに変更  
  5. df2 = df.astype({"index": int})  
  6.   
  7. # インデックスの振り直し  
  8. df2.set_index("index", inplace=True)  
  9.   
  10. print(df2)  
  11. print(df2.dtypes)  

      col1  col2
index           
1        A    11
2        B    22
3        C    33

col1    object
col2     int64
dtype: object

これでスライスも使えるようになります。

0 件のコメント:

コメントを投稿

Pythonで地図空間データを扱う⑤

ベースの地図が出来た所で、他のデータを被せてみます。 国土地理院の  500mメッシュ別将来推計人口データ  を使用します。 同じく神奈川県のデータ  500m_mesh_suikei_2018_shape_14.zip をダウンロードします。 ベースの地図データと同じ場所に展開...