Skip to main content
 首页 » 编程设计

python之字符串索引的 Pandas WHERE 子句

2025年05月04日42zdz8207

假设我有一个表 ss_prices,它有一个名为 fund_code 的主键列,pandas 将其视为索引:

>>> arr = list(zip(['MM1', 'MM2', '3MM', '4AA'], range(1,5))) 
>>> cols = ['fund_code', 'values'] 
>>> ss_prices = pd.DataFrame(arr, columns=cols).set_index('fund_code') 
>>> ss_prices 
              values 
    fund_code 
    MM1       1 
    MM2       2 
    3MM       3 
    4AA       4 

我只想获取主键以“MM”开头的那些行。在 SQL 中我可以这样做:

select * from ss_prices 
where left(fund_code, 2) = 'MM' 

但在 pandas 中,我似乎必须这样做:

ss_prices[np.vectorize(lambda x: x[:2] == 'MM')(ss_prices.index.values)] 

pandas 语法肯定更令人困惑且可读性更差。缺少使用 pandasql 之类的工具, 是否有更易读的方式来完成 WHERE 子句?

请您参考如下方法:

您可以使用 DataFrame.filter使用正则表达式过滤索引:

In [5]: ss_prices 
Out[5]: 
     values 
MM1       1 
MM2       2 
3MM       3 
4AA       4 
 
In [6]: ss_prices.filter(regex='^MM', axis=0) 
Out[6]: 
     values 
MM1       1 
MM2       2