如何从熊猫数据框中的字符串项中删除数字

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)

【讨论】:

以上是关于如何从熊猫数据框中的字符串项中删除数字的主要内容,如果未能解决你的问题,请参考以下文章

从熊猫数据框中的单词中删除子字符串

如何计算熊猫数据框中的非字母数字字符

从熊猫数据框中的地址中删除分数

从熊猫数据框中仅提取数字和字符串

如何从包含特定列中特定字符串的熊猫数据框中删除行? [复制]

如何根据条件表达式从熊猫数据框中删除行[重复]