如何在熊猫数据框中的'abc23','abc(xyz)'等列值的末尾删除数字和括号?

时间:2020-05-06 01:30:04

标签: python pandas dataframe

我有一个熊猫数据框,其中的“国家”列具有以下值:“瑞士17”,“玻利维亚(多民族国)”。我想将它们转换为“瑞士”,“玻利维亚”。我该怎么办?

PS:我可以使用for循环解决问题,但是这很长一段时间,因为这里有一个数据框。我们可以使用任何熊猫数据框函数来解决此问题吗?

4 个答案:

答案 0 :(得分:2)

如果数字和括号是唯一表示要舍弃的内容的开头,则可以基于'('分割字符串,只保留第一部分,然后再次基于数字分割字符串,并保留第一部分,其余部分丢弃。

a = 'Bolivia (Plurinational State of)'
a.split("(")[0] 

会给你玻利维亚。

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

会给您瑞士,并在出现任何数字后丢弃任何东西。

答案 1 :(得分:1)

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

这将起作用。

答案 2 :(得分:0)

因此,您拥有如下数据:

string = 'Switzerland17'

我们可以使用re模块sub函数来替换数字结尾。

import re
no_digits = re.sub(r'\d+$', '', string)

我们得到:

>>> no_digits
'Switzerland'

答案 3 :(得分:0)

假设我们有一个示例数据框df

    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

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