Python 使用条件语句返回数据帧的子集

Python 使用条件语句返回数据帧的子集,python,pandas,indexing,conditional-statements,Python,Pandas,Indexing,Conditional Statements,我是python新手,所以如果这是新手犯的错误,我会提前道歉。我正在使用python 3.4。问题是: 我有一个带有datetimeindex和多个命名列的pandas数据框,如下所示: >>>df 'a' 'b' 'c' 1949-01-08 42.915 0 1.448

我是python新手,所以如果这是新手犯的错误,我会提前道歉。我正在使用python 3.4。问题是:

我有一个带有datetimeindex和多个命名列的pandas数据框,如下所示:

>>>df
                         'a'                 'b'                'c'    
1949-01-08             42.915                  0            1.448   
1949-01-09             19.395                  0            0.062   
1949-01-10              1.077               0.05            0.000   
1949-01-11              0.000              0.038            0.000   
1949-01-12              0.012              0.194            0.000   
1949-01-13              0.000                  0            0.125   
1949-01-14              0.000              0.157            0.007   
1949-01-15              0.000              0.003            0.000  
我尝试使用datetimeindex中的年份和值上的条件语句提取子集:

>>>df['1949':'1980'][df > 0]
                         'a'                 'b'                'c'   
1949-01-08             42.915                NaN            1.448   
1949-01-09             19.395                NaN            0.062   
1949-01-10              1.077               0.05              NaN   
1949-01-11                NaN              0.038              NaN   
1949-01-12              0.012              0.194              NaN   
1949-01-13                NaN                NaN            0.125   
1949-01-14                NaN              0.157            0.007   
1949-01-15                NaN              0.003              NaN 

我的最终目标是找到这个子集的百分位数,但是np.percentile不能处理NAN。我已经尝试过使用dataframe分位数方法,但是有几个丢失的数据点导致它删除整个列。使用条件语句选择值而不返回NaN似乎很简单,但我似乎找不到任何不返回NaN而返回较小子集的语句。任何帮助或建议都将不胜感激。谢谢

我不知道你到底期望得到什么结果

您可以使用
df>=0
0
保留在列中

df['1949':'1980'][df >= 0]
您可以使用
.fillna(0)
NaN
更改为
0

df['1949':'1980'][df > 0].fillna(0)
您可以使用
.dropna()
删除带有任何
NaN
的行,但这样可能会得到空结果

df['1949':'1980'][df > 0].dropna()