PythonのPandasのDataFrameのIndex削除について

Python,イメージ

AI実装検定のご案内

PandasのDataFrameにおけるIndex(行ラベル)の削除にはいくつかの方法があります。

ここでは「行そのものを削除する場合」と「インデックス自体をリセット・変更する場合」に分けて詳しく解説します。

目次

行を削除する(インデックスで指定)

インデックスを利用して特定の行を削除できます。

主にdrop()メソッドを使用します。

基本例

import pandas as pd

# サンプルDataFrameを作成
df = pd.DataFrame({
    "A": [1, 2, 3],
    "B": [4, 5, 6]
}, index=["x", "y", "z"])

print("元のDataFrame:")
print(df)

# 特定のインデックス 'y' の行を削除(新しいDataFrameを返す)
df_dropped = df.drop("y")
print("\nインデックス 'y' を削除したDataFrame:")
print(df_dropped)

# 複数行を削除('x' と 'z')
df_multi_dropped = df.drop(["x", "z"])
print("\nインデックス 'x' と 'z' を削除したDataFrame:")
print(df_multi_dropped)

# 元のdfを直接変更(inplace=True)
df_inplace = df.copy()
df_inplace.drop("y", inplace=True)
print("\nインデックス 'y' を削除(inplace=Trueで元のdfを更新):")
print(df_inplace)

注意点

  • drop()はデフォルトで新しいDataFrameを返します。元のdfを変更したい場合は、inplace=Trueを指定します。 df.drop("y", inplace=True)

インデックスをリセットする

行ラベル自体を削除して、デフォルトの整数インデックス(0,1,2,3…)に戻す方法です。

reset_index()を使います。

基本例

import pandas as pd

# サンプルDataFrameを作成
df = pd.DataFrame({
    "A": [10, 20, 30],
    "B": [40, 50, 60]
}, index=["a", "b", "c"])

print("元のDataFrame:")
print(df)

# reset_index()(デフォルト: 古いインデックスが新しい列として残る)
df_reset = df.reset_index()
print("\nreset_index()(古いインデックスが列に残る):")
print(df_reset)

# reset_index(drop=True)(古いインデックスを完全に削除)
df_reset_drop = df.reset_index(drop=True)
print("\nreset_index(drop=True)(古いインデックスを削除して0から振り直す):")
print(df_reset_drop)

  • drop=False(デフォルト)の場合、古いインデックスは新しい列として残ります。
  • drop=Trueを指定すると古いインデックスを完全に削除できます。

インデックスごと列に変換して削除

もしインデックスを列として使いたいが不要になった場合、reset_index()後にその列をdrop()で削除することもあります。

import pandas as pd

# サンプルDataFrameを作成
df = pd.DataFrame({
    "A": [100, 200, 300],
    "B": [400, 500, 600]
}, index=["row1", "row2", "row3"])

print("元のDataFrame:")
print(df)

# reset_indexでインデックスを列に変換
df_reset = df.reset_index()
print("\nreset_index()でインデックスを列に変換:")
print(df_reset)

# 変換された "index" 列をdrop()で削除
df_cleaned = df_reset.drop("index", axis=1)
print("\nインデックス列 'index' を削除したDataFrame:")
print(df_cleaned)

特殊ケース:条件で行削除

インデックス名ではなく、条件式で行を削除する方法もあります。

import pandas as pd

# サンプルDataFrameを作成
df = pd.DataFrame({
    "A": [5, 15, 25, 35],
    "B": [50, 150, 250, 350]
}, index=["i1", "i2", "i3", "i4"])

print("元のDataFrame:")
print(df)

# 条件を指定して行を残す(Aが10より大きい行だけ残す)
df_filtered = df[df["A"] > 10]
print("\nA > 10 の行だけを残したDataFrame:")
print(df_filtered)

# 条件で行を削除(Aが20以上の行を削除)
df_deleted = df[df["A"] < 20]
print("\nA < 20 の行だけを残したDataFrame(A>=20を削除したのと同じ効果):")
print(df_deleted)

まとめ

  • 行そのものを削除したいdrop(index名)
  • インデックスをリセットしたいreset_index(drop=True)
  • インデックスを列に変換してから削除したいreset_index() + drop("index", axis=1)

以上、PandasのDataFrameのIndex削除についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次