Python 如何删除列值末尾的数字和括号,如';abc23'';abc(xyz)和#x27;在数据帧中?

Python 如何删除列值末尾的数字和括号,如';abc23'';abc(xyz)和#x27;在数据帧中?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框,其中有一列“国家”,其值如下:“瑞士17”、“玻利维亚(多民族国家)”。我想把它们改成“瑞士”、“玻利维亚”。我该怎么做 PS:我可以用for循环解决这个问题,但这需要很长时间,因为我们这里有一个数据帧。我们是否可以使用pandas dataframe函数来解决此问题?因此您有如下数据: string = 'Switzerland17' 我们可以使用re模块sub功能替换数字结尾 import re no_digits = re.sub(r'\d+$', '', strin

我有一个熊猫数据框,其中有一列“国家”,其值如下:“瑞士17”、“玻利维亚(多民族国家)”。我想把它们改成“瑞士”、“玻利维亚”。我该怎么做

PS:我可以用for循环解决这个问题,但这需要很长时间,因为我们这里有一个数据帧。我们是否可以使用pandas dataframe函数来解决此问题?

因此您有如下数据:

string = 'Switzerland17'
我们可以使用
re
模块
sub
功能替换数字结尾

import re
no_digits = re.sub(r'\d+$', '', string)
我们得到:

>>> no_digits
'Switzerland'

如果数字和括号是唯一表示要放弃的内容开始的部分,则可以基于“(”拆分字符串,只保留第一部分,然后再次基于数字拆分字符串,保留第一部分并放弃其余部分

a = 'Bolivia (Plurinational State of)'
a.split("(")[0] 
我会给你玻利维亚

b = 'Switzerland17'
re.compile('[0-9]').split(b)[0] 

在任何数字出现后,将给你瑞士和丢弃任何东西。

假设我们有一个示例dataframe
df
as

    Country
0   Switzerland24
1   USA53
2   Norway3
您可以根据需要使用
filter()
函数

df['Country'] = df['Country'].apply(lambda s : ''.join(filter(lambda x: x.isalpha(), s)))
print(df)


    Country
0   Switzerland
1   USA
2   Norway
或者


这将起作用。

在没有看到示例数据的情况下,我们不知道情况。重复问题:@BransonFox在这个问题中,我们需要手动更改每个字符串,并且只有当字符串是有限的且所有字符串都已知时才可能。这里我有一个数据帧,我想使用pandas数据帧函数来更改值。是的,但我可以只有在我知道字符串的情况下才能这样做。我不知道列中有多少这样的字符串。我只是举了这两个例子。@Harsha数据帧中的列包含字符串。您需要将函数应用于整个列。您的意思是我需要使用for循环吗?我如何才能对数据帧列中的所有值都这样做?(不使用for循环)您可以将该代码放在两个函数中,并将该函数应用于数据帧列,如df['col']。apply(fn_name)
def remove_digits(s):
    for x in range(10):
        s = s.replace(str(x), '')
    return s

df['Country'] = df['Country'].apply(remove_digits)
print(df)

       Country
0  Switzerland
1          USA
2       Norway
def mysplit(a):
    b = a.split("(")[0]
    return re.compile('[0-9]').split(b)[0].rstrip()
df['Country'].apply(mysplit)