我对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的情况下返回较小子集的东西。任何帮助或建议将不胜感激。谢谢!
答案 0 :(得分:1)
我不知道你期望的确切结果。
您可以使用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()