如何基于 Pandas DataFrame 中的列值删除行
Asad Riaz
2023年1月30日
2020年3月28日
我们将介绍通过使用 .drop
(带有和不带有 loc
)和布尔掩码
检查列值的条件来基于 DataFrame
删除行的方法。
用 .drop
方法删除 Pandas DataFrame
中列值的行
.drop
方法接受一个或一列列名,并删除行或列。对于行,我们设置参数 axis=0
,对于列,我们设置参数 axis=1
(默认情况下,axis
为 0
)。我们还可以得到 True
和 False
系列列值,根据应用于 Pandas DataFrame
中的条件。
示例代码:
# 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
是基于列值删除 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