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

4xy9mtcn  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(58)

我的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'加到这个操作后剩下的字符串中,因为年份可以改变。但是我可以处理这个问题。我只需要得到结果。
托马什

bvjveswy

bvjveswy1#

您可以使用以下正则表达式和str.replace来删除年份的4位数字之后的所有内容:

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

字符串
regex demo
或者使用str.extract匹配数字、字母和4位数字:

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


regex demo

  • 注意,如果您只想在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)

avkwfej4

avkwfej42#

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

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

字符串
这段代码专门针对“date”列,并删除每个单元格中“2023”之后的文本,只保留“2023”之前的内容,并将“2023”追加到后面。

相关问题