数据框 - 删除年份后的所有内容,但保留有关年份的信息

问题描述 投票:0回答:2

我的 DF 如下所示:

id date
1  21 July 2023 (abcd)
2  22 July 2023 00:00:01
3  23 July 2023 -abcda

我需要在 2023 年之后删除所有内容,但我想保留它。所以结果应该是:

id date
1  21 July 2023
2  22 July 2023
3  23 July 2023

我使用了这个,但我无法保留有关年份的信息

df['date'].str.rsplit('2023', 1).str.get(0)

我无法将年份“2023”添加到此操作后留下的字符串中,因为年份可能会改变。但我可以处理这个问题。我只需要得到结果。

问候 托马斯

python pandas dataframe date split
2个回答
1
投票

您可以使用以下正则表达式与

str.replace
来删除年份的 4 位数字之后的所有内容:

df['date'] = df['date'].str.replace(r'(?<=\b\d{4}\b).*', '', regex=True)

正则表达式演示

或使用

str.extract
来匹配数字、字母和 4 位数字:

df['date'] = df['date'].str.extract(r'(\d+ [a-zA-Z]+ \d{4})')

正则表达式演示

注意。如果您只想在 2023 之后拆分,而不是任何 4 位数年份,则将

\d{4}
替换为
2023

输出:

   id          date
0   1  21 July 2023
1   2  22 July 2023
2   3  23 July 2023

原始方法的一个变体是使用正则表达式lookbehind进行分割,但它的效率较低,因为你需要2个

str
操作:

df['date'] = df['date'].str.split(r'(?<=2023)', regex=True).str.get(0)

0
投票

如果您想从日期列中删除 2023 年之后的文本,那么您可以简单地通过以下方式实现此目的

df['date'] = df['date'].apply(lambda x: x.split('2023')[0] + '2023')

此代码专门针对“日期”列,并删除每个单元格中“2023”之后的文本,仅保留“2023”之前的内容并将“2023”附加回其中。

© www.soinside.com 2019 - 2024. All rights reserved.