May*_*ank 20 python string pandas
我有一个类似于下面的数据框:
Name Volume Value
May21 23 21321
James 12 12311
Adi22 11 4435
Hello 34 32454
Girl90 56 654654
Run Code Online (Sandbox Code Playgroud)
我希望输出格式为:
Name Volume Value
May 23 21321
James 12 12311
Adi 11 4435
Hello 34 32454
Girl 56 654654
Run Code Online (Sandbox Code Playgroud)
想要从"名称"列中删除所有数字.
我最近来的是使用以下代码在单元级别执行此操作:
result = ''.join([i for i in df['Name'][1] if not i.isdigit()])
Run Code Online (Sandbox Code Playgroud)
任何想法如何在系列/数据级别以更好的方式做到这一点.
Mil*_*ilo 54
您可以将str.replaceName与正则表达式结合使用到列中:
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)
Run Code Online (Sandbox Code Playgroud)
输出:
Name Value Volume
0 May 21321 23
1 James 12311 12
2 Adi 4435 11
3 Hello 32454 34
4 Girl 654654 56
Run Code Online (Sandbox Code Playgroud)
正则表达式\d代表"任何数字",+代表"一个或多个".
因此,str.replace('\d+', '')意思是:"用任何东西替换字符串中所有出现的数字".
您可以这样做:
df.Name = df.Name.str.replace('\d+', '')
Run Code Online (Sandbox Code Playgroud)
要玩和探索,请在此处查看在线正则表达式演示:https : //regex101.com/r/Y6gJny/2
模式匹配的任何内容(\d+即1个或多个数字)都将替换为空字符串。
尽管这个问题听起来更笼统,但示例输入仅包含尾随数字。在这种情况下,您不必使用正则表达式,因为.rstrip(也可以通过对象的.str访问器获得Series)可以做到这一点:
import string
df['Name'] = df['Name'].str.rstrip(string.digits)
Run Code Online (Sandbox Code Playgroud)
同样,您可以使用.lstrip从开头.strip去除任何数字,或从每个字符串的开头和结尾删除任何数字。
.str没有必要。您可以使用大熊猫dataframe.replace或series.replace与regex=True争论。
df.replace('\d+', '', regex=True)
Run Code Online (Sandbox Code Playgroud)
如果要更改源数据帧,请使用inplace=True.
df.replace('\d+', '', regex=True, inplace=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36757 次 |
| 最近记录: |