[英]How to filter a string in a column of Pandas data frame using for loop
How can I use 'for' loop (eg ' for i in range(1996,2000,1) ') in string filtering of Pandas data frame ?如何在 Pandas 数据框的字符串过滤中使用“for”循环(例如“ for i in range(1996,2000,1) ”)?
I have a data frame like this:我有一个这样的数据框:
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
I like to filter '1998' from the 'Date' column using a ' for i in range(1996,2000,1) ' loop and create a new DF so that it would look like this:我喜欢使用 ' for i in range(1996,2000,1) ' 循环从 'Date' 列中过滤 '1998' 并创建一个新的 DF,使其看起来像这样:
Date Value
05/03/1998 1005
01/05/1998 448
for
loops are slower, should be ideally avoided if possible . for
循环较慢,最好尽可能避免。
Convert Date
column to datetime
using pd.to_datetime
and then extract only year
using Series.dt.year
:使用pd.to_datetime
将Date
列转换为datetime
pd.to_datetime
,然后使用Series.dt.year
仅提取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
Additionally, per @CainãMaxCouto-Silva's comment:此外,根据@CainãMaxCouto-Silva 的评论:
You can filter a range of years as well:您还可以过滤一系列年份:
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
Another way其它的办法
df.Date = pd.to_datetime(df.Date)
df[df.Date.dt.isocalendar().year.eq(1998)]
Date Value
1 1998-05-03 1005
3 1998-01-05 448
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.