【问题标题】:Turn NaN in dataframe if condition met如果满足条件,则在数据框中打开 NaN
【发布时间】:2020-09-08 03:30:30
【问题描述】:

我在这里有一列看起来像这样并且是数据框的一部分:

df.Days_Since_Earnings
Out[5]: 
0      21.0
2       1.0
4    1000.0
5     500.0
6     119.0
Name: Days_Since_Earnings, Length: 76, dtype: float64

我想保持原样,除了我想把 120 以上的数字变成 'nan's,所以它看起来像这样:

df.Days_Since_Earnings
Out[5]: 
0      21.0
2       1.0
4       nan
5       nan
6     119.0
Name: Days_Since_Earnings, Length: 76, dtype: float64

感谢任何提供帮助的人!

【问题讨论】:

  • df[df.Days_Since_Earnings.gt(120)] = np.nan
  • 这能回答你的问题吗? How to set a cell to NaN in a pandas dataframe
  • idx_days_over_120 = df["Days_Since_Earnings"] > 120 然后df.loc[idx_days_over_120, "Days_Since_Earnings"] = np.nan
  • 这很有帮助,谢谢

标签: python pandas dataframe filter filtering


【解决方案1】:

你可以使用mask:

df['Days_Since_Earnings'] = df.Days_Since_Earnings.mask(df.Days_Since_Earnings > 120)

或where 与相反条件

df['Days_Since_Earnings'] = df.Days_Since_Earnings.where(df.Days_Since_Earnings <= 120)

或loc 分配:

df.loc[df.Days_Since_Earnings > 120, 'Days_Since_Earnings'] = np.nan

【讨论】:

    【解决方案2】:
    df['days'] = df['days'].apply(lambda x: np.nan if x > 120 else x)
    print(df)
    

    或者

    df[df['days'] > 120] = np.nan
    
        days
    0   21.0
    1    1.0
    2    NaN
    3    NaN
    4  119.0
    

    【讨论】:

    猜你喜欢
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2020-11-14
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多