【问题标题】:Conditional dropna() pandas条件 dropna() 熊猫
【发布时间】:2019-04-11 09:48:10
【问题描述】:

我有一个相当简单的问题:我想根据条件从 DataFrame 中删除行。 DataFrame 看起来像这样:

Program        act
Original RO     A
Original RO    nan
Followup RO     B
Followup RO    nan
Integral RO    nan

我只想删除 Original ROIntegral RO 程序的空值。所以它应该是这样的:

Program        act
Original RO     A
Followup RO     B
Followup RO    nan

当我尝试对我的数据框的一部分进行一些操作并保持其余部分不变时,我总是遇到问题。

我试过了:

df.loc[df.Program.str.match('^(Original|Integral)')] = df.dropna()

但不起作用。我究竟做错了什么? 提前致谢!

【问题讨论】:

    标签: python pandas nan


    【解决方案1】:

    您可以使用isin()isna() 检查条件并子集数据帧。

    lst = ['Original RO', 'Integral RO']
    
    df = df[~(df['Program'].isin(lst) & df['act'].isna())]
    
    # Another one using drop.
    # df = df.drop(df[(df['Program'].isin(lst) & df['act'].isna())].index)
    
    print (df)
    
           Program  act
    0  Original RO    A
    2  Followup RO    B
    3  Followup RO  NaN
    

    【讨论】:

      【解决方案2】:

      您可以在对dropna()的调用中使用参数subset

      df.dropna(subset=cols, inplace=True)
      

      其中cols 是您要检查的列的名称(删除行)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-11
        • 2016-11-19
        • 2015-01-03
        • 2020-07-25
        • 2020-01-25
        • 2018-07-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多