我有以下一组日期,我希望过滤所有的行,如果它有'2022-02'在它。
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
January 2021-12-26 2021-12-27 2021-12-28 2021-12-29 2021-12-30 2021-12-31 2022-01-01
January 2022-01-02 2022-01-03 2022-01-04 2022-01-05 2022-01-06 2022-01-07 2022-01-08
January 2022-01-09 2022-01-10 2022-01-11 2022-01-12 2022-01-13 2022-01-14 2022-01-15
January 2022-01-16 2022-01-17 2022-01-18 2022-01-19 2022-01-20 2022-01-21 2022-01-22
January 2022-01-23 2022-01-24 2022-01-25 2022-01-26 2022-01-27 2022-01-28 2022-01-29
February 2022-01-30 2022-01-31 2022-02-01 2022-02-02 2022-02-03 2022-02-04 2022-02-05
February 2022-02-06 2022-02-07 2022-02-08 2022-02-09 2022-02-10 2022-02-11 2022-02-12
February 2022-02-13 2022-02-14 2022-02-15 2022-02-16 2022-02-17 2022-02-18 2022-02-19
February 2022-02-20 2022-02-21 2022-02-22 2022-02-23 2022-02-24 2022-02-25 2022-02-26
March 2022-02-27 2022-02-28 2022-03-01 2022-03-02 2022-03-03 2022-03-04 2022-03-05
March 2022-03-06 2022-03-07 2022-03-08 2022-03-09 2022-03-10 2022-03-11 2022-03-12
March 2022-03-13 2022-03-14 2022-03-15 2022-03-16 2022-03-17 2022-03-18 2022-03-19
March 2022-03-20 2022-03-21 2022-03-22 2022-03-23 2022-03-24 2022-03-25 2022-03-26
April 2022-03-27 2022-03-28 2022-03-29 2022-03-30 2022-03-31 2022-04-01 2022-04-02
April 2022-04-03 2022-04-04 2022-04-05 2022-04-06 2022-04-07 2022-04-08 2022-04-09
....
我尝试过滤掉带有'2022- 02'的行,如下所示:PS此数据框有一行“March”,因为该行中也存在“2022-02”。
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
February 2022-01-30 2022-01-31 2022-02-01 2022-02-02 2022-02-03 2022-02-04 2022-02-05
February 2022-02-06 2022-02-07 2022-02-08 2022-02-09 2022-02-10 2022-02-11 2022-02-12
February 2022-02-13 2022-02-14 2022-02-15 2022-02-16 2022-02-17 2022-02-18 2022-02-19
February 2022-02-20 2022-02-21 2022-02-22 2022-02-23 2022-02-24 2022-02-25 2022-02-26
March 2022-02-27 2022-02-28 2022-03-01 2022-03-02 2022-03-03 2022-03-04 2022-03-05
这些方法我都试过了,都不管用。
一个二个一个一个
2条答案
按热度按时间vjhs03f71#
根据你的评论-
是的,它们是字符串
IIUC,这些日期是字符串,您试图在搜索字符串时将它们视为日期变量)。解决此问题的理想方法是将所有数据转换为datetime,然后使用
pd.series.dt.
方法,但是,由于所有数据都已经是字符串,这只是一个简单的字符串搜索问题,请随意使用以下方法。row.str.find('2022-02')>=0)
检查在给定行中是否找到给定字符串。calender.apply(lambda row ...
将其独立应用于每行。.any(1)
在每行的True/False值之间取一个OR
,如果任何行包含2022-02
,则给予Truecalender[...]
使用上面的布尔级数只获取您想要的行。希望这能解释下面的代码-
避免将日期字符串作为
2022-01-10 > 2022-02-11
进行比较在这里补充一点,对于后代来说,使用
>
或<=
将日期作为字符串进行比较并不是一个好的做法,在这里的这篇流行的SO帖子中详细讨论了这一点。此外,进行字符串比较时只会比较每个字符的Unicode值,因此很容易出现
'10/15/13' > '10/12/14'
这样的失败情况因此,我强烈建议避免这些类型的编码实践。
fhity93d2#
从此代码中使用
这是非常简单和快速的如果你的数据集在这一行之前很大,你可以使用from convert_dtypes方法(有时Pandas使用from object作为数据类型,这是非常慢的)