Pandas DataFrame の列値に基づいて行を削除する方法
Asad Riaz
2023年1月30日
2020年4月1日
Pandas
Pandas DataFrame

列値の条件に基づいて Pandas DataFrame
行を削除する方法を紹介します。たとえば、.drop
(loc
の有無にかかわらず)と boolean masking
を使用します。
Pandas DataFrame
の列値の行を削除する .drop
メソッド
.drop
メソッドは列名の単一またはリストを受け入れ、行または列を削除します。行にはパラメータ axis=0
を設定し、列には axis=1
を設定します(デフォルトでは axis=0
です)。Pandas DataFrame
の列の値に適用される条件に基づいて、True
と False
のシリーズを取得することもできます。
コード例:
# python 3.x
import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ) ,
('Mango', 24, 'No' ) ,
('banana', 14, 'No' ) ,
('Apple', 44, 'Yes' ) ,
('Pineapple', 64, 'No') ,
('Kiwi', 84, 'Yes') ]
#Create a DataFrame object
df = pd.DataFrame(fruit_list, columns =
['Name' , 'Price', 'Stock'])
# Get names of indexes for which column Stock has value No
indexNames = df[ df['Stock'] == 'No' ].index
# Delete these row indexes from dataFrame
df.drop(indexNames , inplace=True)
print(df)
出力:
Name Price Stock
0 Orange 34 Yes
3 Apple 44 Yes
5 Kiwi 84 Yes
df.drop
メソッド内で .loc
を使用して同様の結果を取得することもできます。
df.drop(df.loc[df['Stock']=='Yes'].index, inplace=True)
複数の列の値に基づいて行を削除することもできます。上記の例では、価格が 30 以上、価格が 70 以下の行を削除できます。
コード例:
# python 3.x
import pandas as pd
# List of Tuples
fruit_list = [ ('Orange', 34, 'Yes' ) ,
('Mango', 24, 'No' ) ,
('banana', 14, 'No' ) ,
('Apple', 44, 'Yes' ) ,
('Pineapple', 64, 'No') ,
('Kiwi', 84, 'Yes') ]
#Create a DataFrame object
df = pd.DataFrame(fruit_list, columns =
['Name' , 'Price', 'Stock'])
indexNames = df[ (df['Price'] >= 30)
& (df['Price'] <= 70) ].index
df.drop(indexNames , inplace=True)
print(df)
出力:
Name Price Stock
1 Mango 24 No
2 banana 14 No
5 Kiwi 84 Yes
価格が 30 以上 70 未満の行は削除されました。
Pandas DataFrame
の行を削するための boolean masking
メソッドは
boolean masking
は、列の値に基づいて Pandas DataFrame
で行を削除するための最良かつ最も簡単な方法です。
コード例:
# python 3.x
import pandas as pd
# List of Tuples
fruit_list = [ ('Orange', 34, 'Yes' ) ,
('Mango', 24, 'No' ) ,
('banana', 14, 'No' ) ,
('Apple', 44, 'Yes' ) ,
('Pineapple', 64, 'No') ,
('Kiwi', 84, 'Yes') ]
#Create a DataFrame object
df = pd.DataFrame(fruit_list, columns =
['Name' , 'Price', 'Stock'])
print(df[df.Price > 40])
print('............................')
print(df[(df.Price > 40) & (df.Stock== 'Yes')])
出力:
Name Price Stock
3 Apple 44 Yes
4 Pineapple 64 No
5 Kiwi 84 Yes
............................
Name Price Stock
3 Apple 44 Yes
5 Kiwi 84 Yes