我的df如下所示

x  date_from             cleaned_date
1  21 JUNE 23.59          2024-06-23
2  18TH JUN 23:59        2024-06-18   
3  01TH JULY (23.59 HRS) 2024-07-01
4  28th June 2023        2023-06-28
5  5TH MAY 2023          2023-05-05
6  JUNE 27, 2023         2023-06-27

我编写了一段代码,从DATE_FROM列中提取正确的日期,但不知何故,它从无到有添加了‘Year’.在某些情况下,没有关于年份的信息,但它仍然试图添加它.我编写了一段处理它的代码,如果没有年份信息,它会将CLEVED_DATE列中的整个值替换为NONE.如下所示:

df.loc[(~df['date_from'].astype('str').str.contains('2025')) &
                (~df['date_from'].astype('str').str.contains('2024')) &
                 (df['date_from'].astype('str') != 'nan') & 
                 (~df['date_from'].astype('str').str.contains('2023')) &
                 (~df['date_from'].astype('str').str.contains('2022')) &
                 (~df['date_from'].astype('str').str.contains('2021')) &
                 (~df['date_from'].astype('str').str.contains('2020')) &
                 (~df['date_from'].astype('str').str.contains('2019')),  'cleaned_date'] = None

不幸的是,我还有更多的时间来判断,那么有没有什么方法可以使用,比如for loop?你有什么 idea 吗?

问候

推荐答案

您可以用一个正则表达式替换您的多个条件:

df.loc[~df['date_from'].str.contains('nan|(?:2019|202[0-5])'),
       'cleaned_date'] = None

输出:

   x              date_from cleaned_date
0  1          21 JUNE 23.59         None
1  2         18TH JUN 23:59         None
2  3  01TH JULY (23.59 HRS)         None
3  4         28th June 2023   2023-06-28
4  5           5TH MAY 2023   2023-05-05
5  6          JUNE 27, 2023   2023-06-27

regex demo

nan                # match nan
|                  # or
(?:2019|202[0-5])  # match 2019 or 2020-2025

如果你坚持许多条件,这在numpy.logical_or.reduce个条件下是可行的:

vals = ['nan', '2019', '2020', '2021', '2022', '2023', '2024', '2025']

cond = ~np.logical_or.reduce([df['date_from'].astype('str').str.contains(val)
                              for val in vals])

df.loc[cond, 'cleaned_date'] = None

Python相关问答推荐

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

使用密钥字典重新配置嵌套字典密钥名

Pandas—在数据透视表中占总数的百分比

如何并行化/加速并行numba代码?

如何在Python中使用另一个数据框更改列值(列表)

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?

Numpyro AR(1)均值切换模型抽样不一致性

如何将一组组合框重置回无 Select tkinter?

如何在SQLAlchemy + Alembic中定义一个"Index()",在基表中的列上

Polars定制函数返回多列

如何在networkx图中提取和绘制直接邻居(以及邻居的邻居)?

3.我无法找到制作这种三角形图案的方法

有没有一种简单的方法来访问Polars struct 中的值?

如何省略所有Pandas 数据帧

nameError_C未定义

提取子数组,然后在Python中将它们连接起来

Pandas 修正滚动平均

查找一个数据帧中另一个数据帧的值的索引

带极点数据帧的倒数值(&Q;)

如何 Select 包含一定字符串和数字的单元格?