如何从熊猫数据框中的字符串项中删除数字
Posted
技术标签:
【中文标题】如何从熊猫数据框中的字符串项中删除数字【英文标题】:How to remove numbers from string terms in a pandas dataframe 【发布时间】:2017-06-02 19:43:49 【问题描述】:我有一个类似于下面的数据框:
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
想要从名称列中删除所有数字。
我最接近的是在 cell 级别使用以下代码进行操作:
result = ''.join([i for i in df['Name'][1] if not i.isdigit()])
知道如何在 series/dataframe 级别以更好的方式做到这一点。
【问题讨论】:
【参考方案1】:您可以结合正则表达式将str.replace 应用于Name
列:
import pandas as pd
# Example DataFrame
df = pd.DataFrame.from_dict('Name' : ['May21', 'James', 'Adi22', 'Hello', 'Girl90'],
'Volume': [23, 12, 11, 34, 56],
'Value' : [21321, 12311, 4435, 32454, 654654])
df['Name'] = df['Name'].str.replace('\d+', '')
print(df)
输出:
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+', '')
的意思是:“将字符串中所有出现的数字替换为空”。
【讨论】:
【参考方案2】:你可以这样做:
df.Name = df.Name.str.replace('\d+', '')
要玩和探索,请在此处查看在线正则表达式演示:https://regex101.com/r/Y6gJny/2
\d+
模式匹配的任何内容,即 1 个或多个数字,都将替换为空字符串。
【讨论】:
【参考方案3】:虽然这个问题听起来更笼统,但示例输入仅包含 尾随 数字。在这种情况下,您不必使用正则表达式,因为.rstrip
(也可用via the .str
accessor of Series
objects)可以做到这一点:
import string
df['Name'] = df['Name'].str.rstrip(string.digits)
同样,您可以使用.lstrip
删除开头的任何数字,或使用.strip
删除每个字符串开头和结尾的任何数字。
【讨论】:
【参考方案4】:.str
不是必需的。您可以使用带有 regex=True
参数的 pandas dataframe.replace 或 series.replace。
df.replace('\d+', '', regex=True)
如果您想更改源数据框,请使用inplace=True
。
df.replace('\d+', '', regex=True, inplace=True)
【讨论】:
以上是关于如何从熊猫数据框中的字符串项中删除数字的主要内容,如果未能解决你的问题,请参考以下文章