如何将布尔索引Nan值返回为NaN而不是false

时间:2017-03-25 00:56:37

标签: pandas boolean

我正在使用此代码

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

有可能吗?

3 个答案:

答案 0 :(得分:2)

假设this.isLoading=false列尚不存在

bullish

答案 1 :(得分:1)

您是否尝试过使用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)

我确信你可以让代码更优雅,但这样可以。

答案 2 :(得分:1)

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

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