使用条件语句返回DataFrame的子集

1 投票
1 回答
1177 浏览
提问于 2025-04-18 14:18

我对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()

撰写回答