使用条件语句返回DataFrame的子集
我对Python还比较陌生,所以如果我犯了初学者的错误,请多包涵。我现在用的是Python 3.4。我的问题是:
我有一个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
我想根据日期时间索引中的年份和一些条件来提取一个子集:
>>>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(缺失值)。我尝试过使用数据框的quantile方法,但因为有几个数据点缺失,导致整个列都被丢掉了。看起来用条件语句选择不带NaN的值应该很简单,但我找不到任何方法能返回一个没有NaN的更小的子集。任何帮助或建议都非常感谢!谢谢!
1 个回答
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()