如何在pandas数据框架中从字符串中删除数字

2024-06-12 14:59:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似于下面的数据框:

Name    Volume  Value
May21   23      21321
James   12      12311
Adi22   11      4435
Hello   34      32454
Girl90  56      654654

我希望输出格式为:

Name    Volume  Value
May     23      21321
James   12      12311
Adi     11      4435
Hello   34      32454
Girl    56      654654

要从“名称”列中删除所有数字。

我最接近的是在单元格级别使用以下代码执行此操作:

result = ''.join([i for i in df['Name'][1] if not i.isdigit()])

任何关于如何在系列/数据框架级别以更好的方式执行此操作的想法。


Tags: 数据name名称hellovalue格式级别may
3条回答

可以结合正则表达式将str.replace应用于Name列:

import pandas as pd

# Create example DataFrame
a = pd.DataFrame.from_dict({'Name': ['May21', 'James', 'Adi22', 'Hello', 'Girl90'], 'Volume': [23, 12, 11, 34, 56], 'Value': [21321, 12311, 4435, 32454, 654654]})

a['Name'] = a['Name'].str.replace('\d+', '')

print(a)

输出:

    Name   Value  Volume
0    May   21321      23
1  James   12311      12
2    Adi    4435      11
3  Hello   32454      34
4   Girl  654654      56

在正则表达式中,\d表示“任意数字”,而+表示“一个或多个”。

因此,str.replace('\d+', '')的意思是:“将字符串中所有出现的数字替换为空”。

你可以这样做:

df.Name = df.Name.str.replace('\d+', '')

要播放和浏览,请查看此处的联机正则表达式演示:https://regex101.com/r/Y6gJny/2

与模式匹配的任何内容(即1个或多个数字)都将被空字符串替换。

尽管这个问题听起来更一般,但示例输入只包含尾随数字。在这种情况下,您不必使用正则表达式,因为^{}(也可以使用via the ^{} accessor of ^{} objects)可以做到这一点:

import string
df['Name'] = df['Name'].str.rstrip(string.digits)

类似地,可以使用^{}从开始处删除任何数字,或者使用^{}从每个字符串的开始和结束处删除任何数字。

相关问题 更多 >