我可以在方法链中使用pd.drop删除特定行吗?

时间:2019-09-27 12:19:08

标签: python pandas dataframe method-chaining

我想知道在链接构建数据帧的方法时是否可以使用pandas .drop方法删除行。

数据框存在后,直接删除行即可:

import pandas as pd

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [5, 4, 3]})
print(df1)

# drop the entries that match "2"
df1 = df1[df1['A'] !=2]
print(df1)

但是,我想在创建数据框时这样做:

df2 = (pd.DataFrame({'A': [1, 2, 3], 'B': [5, 4, 3]})
        .rename(columns={'A': 'AA'})
#        .drop(lambda x: x['A']!=2)
        )
print(df2)

注释行不起作用,但是也许有一种正确的方法。感谢您的任何投入。

3 个答案:

答案 0 :(得分:4)

DataFrame.loccallable一起使用:

df2 = (pd.DataFrame({'A': [1, 2, 3], 'B': [5, 4, 3]})
        .rename(columns={'A': 'AA'})
        .loc[lambda x: x['AA']!=2]
        )

DataFrame.query

df2 = (pd.DataFrame({'A': [1, 2, 3], 'B': [5, 4, 3]})
        .rename(columns={'A': 'AA'})
        .query("AA != 2")
        )
print(df2)
   AA  B
0   1  5
2   3  3

答案 1 :(得分:1)

您可以将DataFrame.applyDataFrame.dropna结合使用:

df2 = (pd.DataFrame({'A': [1, 2, 3], 'B': [5, 4, 3]})
        .rename(columns={'A': 'AA'})
       .apply(lambda x: x if x['AA'] !=2 else np.nan,axis=1).dropna()
        )
print(df2)


    AA    B
0  1.0  5.0
2  3.0  3.0

答案 2 :(得分:0)

也许您可以在定义行代码的末尾尝试使用“ .loc”进行选择。