我的 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”添加到此操作后留下的字符串中,因为年份可能会改变。但我可以处理这个问题。我只需要得到结果。
问候 托马斯
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)
如果您想从日期列中删除 2023 年之后的文本,那么您可以简单地通过以下方式实现此目的
df['date'] = df['date'].apply(lambda x: x.split('2023')[0] + '2023')
此代码专门针对“日期”列,并删除每个单元格中“2023”之后的文本,仅保留“2023”之前的内容并将“2023”附加回其中。