我有一个类似于下面的数据框:
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()])
知道如何在系列 / 数据框级别更好地完成此操作。
答案 0 :(得分:38)
您可以将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+', '')
表示:"用字符串替换字符串中所有出现的数字"。
答案 1 :(得分:5)
你可以这样做:
df.Name = df.Name.str.replace('\d+', '')
点击此处在线正则表达式演示:https://regex101.com/r/Y6gJny/2
无论模式\d+
匹配的是什么,即一个或多个数字,都将被空字符串替换。
答案 2 :(得分:2)
尽管这个问题听起来更笼统,但示例输入仅包含 trailing 数字。在这种情况下,您不必使用正则表达式,因为.rstrip
(也可以使用via the .str
accessor of Series
objects)可以做到这一点:
import string
df['Name'] = df['Name'].str.rstrip(string.digits)
答案 3 :(得分:2)
.str
是不必要的。您可以将dataframe.replace或series.replace的熊猫与regex=True
参数一起使用。
df.replace('\d+', '', regex=True)
如果要更改源数据帧,请使用inplace=True
。
df.replace('\d+', '', regex=True, inplace=True)