首页 > 解决方案 > 如何使用 for 循环过滤 Pandas 数据框列中的字符串

问题描述

如何在 Pandas 数据帧的字符串过滤中使用“for”循环(例如“ for i in range(1996,2000,1) ”)?

我有一个这样的数据框:

Date            Value
07/09/1997      505
05/03/1998      1005
03/02/2000      747
01/05/1998      448
06/08/1996      57
09/11/2000      673

我喜欢使用' for i in range(1996,2000,1) '循环从'Date'列中过滤'1998'并创建一个新的DF,使其看起来像这样:

Date            Value
05/03/1998      1005
01/05/1998      448

标签: pythonpython-3.xpandasdataframe

解决方案


for循环比较慢,如果可能的话最好避免

Date列转换为datetimeusing pd.to_datetime,然后仅提取yearusing Series.dt.year

In [2441]: df.Date = pd.to_datetime(df.Date)
In [2446]: df = df[df.Date.dt.year.eq(1998)]

In [2447]: df
Out[2447]: 
        Date  Value
1 1998-05-03   1005
3 1998-01-05    448

此外,根据@CainãMaxCouto-Silva 的评论:

您也可以过滤一系列年份:

In [2451]: df[df.Date.dt.year.isin(range(1996,2000))]
Out[2451]: 
        Date  Value
0 1997-07-09    505
1 1998-05-03   1005
3 1998-01-05    448
4 1996-06-08     57

推荐阅读