假设我有一个表 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
我是一名优秀的程序员,十分优秀!