Skip to main content
 首页 » 编程设计

python之从第一个非空白之前获取列的子集

2025年05月04日20findumars

我需要从第一个非空白单元格之前的单元格开始获取 pandas 系列的子集。

例如:对于系列:

>>> s = pd.Series([np.NaN, np.NaN, 1], index=['a', 'b', 'c']) 
>>> s 
 
a    NaN 
b    NaN 
c    1.0 
dtype: float64 

我需要获取包含行“b”和“c”的子集。像这样:

b    NaN 
c    1.0 
dtype: float64 

我有以下代码:

import pandas as pd 
import numpy as np 
 
s = pd.Series([np.NaN, np.NaN, 1], index=['a', 'b', 'c']) 
lst = s.index.to_list() 
s[lst[lst.index(s.first_valid_index())-1:]] 

有没有更简单和/或更快的方法来做到这一点? 请注意,数据可能包含空白来代替 NA。

请您参考如下方法:

使用 get_loc(您也不必再依赖 let)和 first_valid_index,这样可读性稍强:

s[s.index.get_loc(s.first_valid_index())-1:] 
 
b    NaN 
c    1.0 
dtype: float64 

假设您的索引值是唯一的,这将起作用。


要处理空白,使用replace,

s2 = pd.Series(['', np.NaN, 1], index=['a', 'b', 'c']) 
s2[s2.index.get_loc(s2.replace('', np.nan).first_valid_index())-1:] 
 
b    NaN 
c      1 
dtype: object