【问题标题】:How to return boolean indexing Nan values as NaN and not false如何将布尔索引Nan值返回为NaN而不是false
【发布时间】:2017-08-18 02:11:07
【问题描述】:

我正在使用此代码

df['Bullish'] = (df['7days_Avg']>0.02).map(int) 

作为分类方式; 1 = 真,0 = 假。 但是,当df['7days_Avg'] 列没有值(NaN)时,我还希望布尔值输出为“Nan”

下面是我得到的输出

            7days_Avg  Bullish  
Date                            
2017-02-23  -0.085974        0  
2017-02-24  -0.067239        0  
2017-02-27  -0.084491        0  
2017-02-28  -0.052741        0  
2017-03-01  -0.043309        0  
2017-03-02   0.092256        1  
2017-03-03   0.095302        1  
2017-03-06   0.069974        1  
2017-03-07   0.040541        1  
2017-03-08   0.005051        0  
2017-03-09   0.007219        0  
2017-03-10  -0.011321        0  
2017-03-13  -0.007576        0  
2017-03-14        NaN        0  
2017-03-15        NaN        0  
2017-03-16        NaN        0  

如您所见,Bullish 列的最后三行的值为 0,尽管7days_avg 的最后三行的值为Nan。我希望Bullish 也输出NaN 其中7days_avg row 的值是NaN

有可能吗?

【问题讨论】:

    标签: pandas boolean


    【解决方案1】:

    假设bullish 列不存在

    sda = df['7days_Avg']
    df.loc[sda.notnull(), 'Bullish'] = (sda > 0.02).map(int) 
    

    【讨论】:

    • 这行得通。您是否只是使用 df.loc 创建一个新列(“牛市”)?我不知道这是可能的。
    • 我终于开始理解代码了。令人印象深刻的东西。
    【解决方案2】:

    或者,为了保持一行,您可以稍微重新排序代码并使用映射参数 na_action,如下所示:

    df['bullish'] = df['avg'].map(lambda x: int(x > 0.02), na_action='ignore')
    

    【讨论】:

      【解决方案3】:

      您是否尝试过使用 apply 方法? 示例:

      import pandas as pd
      import numpy as np
      
      
      def is_bullish(x):
          if x > 0.02:
              return True
          elif x <= 0.02:
              return False
          else:
              return np.NaN
      
      df = pd.DataFrame({'avg': [np.random.randint(-10, 10)/100 for x in range(10)]})
      df['avg'].ix[1] = None
      print(df)
      df['bullish'] = df['avg'].apply(is_bullish)
      print(df)
      

      我相信你可以让代码更优雅,但这会奏效。

      【讨论】:

      • 谢谢。这似乎可行,但上面的代码要精确得多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 1970-01-01
      • 2014-07-05
      • 2019-10-07
      相关资源
      最近更新 更多