【问题标题】:Pandas dataframe setting cell to NaNPandas 数据框将单元格设置为 NaN
【发布时间】:2018-08-13 20:44:30
【问题描述】:

我已经创建了一个这样的数据框:

    A  B
0  aa  1
1  bb  2
2  cc  3
3  dd  1
4  ee  1

然后我用这一行插入了一个标签:

df['label']= np.where((df['B']>2),'start',np.NaN)

结果是

    A  B  label
0  aa  1    nan
1  bb  2    nan
2  cc  3  start
3  dd  1    nan
4  ee  1    nan

这是相当直截了当的。但是,当我尝试反查我的表时,我无法获得“nan”行。

df[(df.label.isnull())]
Empty DataFrame
Columns: [A, B, label]
Index: []

df[(df.label.isna())]
Empty DataFrame
Columns: [A, B, label]
Index: []

df[(df.label == np.nan)]
Empty DataFrame
Columns: [A, B, label]
Index: []

我只使用这个来获取 nan 行:

df[(df.label == 'nan')]
    A  B label
0  aa  1   nan
1  bb  2   nan
3  dd  1   nan
4  ee  1   nan

我错误地将空值设置为字符串值“nan”是不是做错了什么?谢谢。

【问题讨论】:

    标签: pandas dataframe filter nan


    【解决方案1】:

    您可以使用申请:

    df['label'] = df.apply(lambda x: 'start' if x.B>2 else np.nan, axis=1)
    
    df[(df.label.isnull())]
    Out[135]: 
        A  B label
    0  aa  1   NaN
    1  bb  2   NaN
    3  dd  1   NaN
    4  ee  1   NaN
    

    或者:

    df['label'] = df.B.gt(2).apply({True:'start',False:np.nan}.get)
    

    【讨论】:

      【解决方案2】:

      是的。 np.wherenp.NaN 转换为字符串,因为 start 是字符串:

      np.where((df['B']>2), 'start', np.NaN)
      
      #array(['nan', 'nan', 'start', 'nan', 'nan'],
      #      dtype='|S32')
      

      提供None作为字符串的空值:

      df['label'] = np.where((df['B']>2), 'start', None)
      
      df[df.label.isnull()]
      
      #    A  B   label
      #0  aa  1   None
      #1  bb  2   None
      #3  dd  1   None
      #4  ee  1   None
      

      或者使用pd.Series.where方法:

      df['label'] = 'start'
      df['label'] = df.label.where(df.B > 2)
      df[df.label.isnull()]
      
      #   A   B   label
      #0  aa  1   NaN
      #1  bb  2   NaN
      #3  dd  1   NaN
      #4  ee  1   NaN
      

      【讨论】:

        猜你喜欢
        • 2016-04-20
        • 2022-12-09
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 2018-12-15
        • 1970-01-01
        • 2022-01-16
        • 2022-10-18
        相关资源
        最近更新 更多