如何基于 Pandas DataFrame 中的列值删除行

Asad Riaz 2020年6月25日 2020年3月28日 Pandas Pandas DataFrame
  1. .drop 方法删除 Pandas DataFrame 中列值的行
  2. 布尔屏蔽方法删除 Pandas DataFrame 中的行
如何基于 Pandas DataFrame 中的列值删除行

我们将介绍通过使用 .drop(带有和不带有 loc)和布尔掩码检查列值的条件来基于 DataFrame 删除行的方法。

.drop 方法删除 Pandas DataFrame 中列值的行

.drop 方法接受一个或一列列名,并删除行或列。对于行,我们设置参数 axis=0,对于列,我们设置参数 axis=1(默认情况下,axis0)。我们还可以得到 TrueFalse 系列列值,根据应用于 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

相关文章 - Pandas DataFrame

  • 如何将 Pandas DataFrame 列标题获取为列表
  • 如何删除 Pandas DataFrame 列
  • 如何在 Pandas 中将 DataFrame 列转换为日期时间
  • 如何在 Pandas DataFrame 中将浮点数转换为整数
  • 如何按一列的值对 Pandas DataFrame 进行排序
  • 如何用 group-by 和 sum 获得 Pandas 总和