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削除についてでした。
最後までお読みいただき、ありがとうございました。