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

时间:2014-07-22 16:40:28

标签: python pandas indexing conditional-statements

我对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。我已经尝试过使用数据帧分位数方法,但是有一些丢失的数据点会导致它丢弃整个列。看起来使用条件语句来选择值而不返回NaN会很简单,但我似乎无法找到任何在没有NaN的情况下返回较小子集的东西。任何帮助或建议将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我不知道你期望的确切结果。

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

df['1949':'1980'][df >= 0]

您可以使用.fillna(0)NaN更改为0

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

您可以使用.dropna()删除任意NaN的行 - 但这样可能会得到空的结果。

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