Python 如何删除列值末尾的数字和括号,如';abc23'';abc(xyz)和#x27;在数据帧中?
我有一个熊猫数据框,其中有一列“国家”,其值如下:“瑞士17”、“玻利维亚(多民族国家)”。我想把它们改成“瑞士”、“玻利维亚”。我该怎么做 PS:我可以用for循环解决这个问题,但这需要很长时间,因为我们这里有一个数据帧。我们是否可以使用pandas dataframe函数来解决此问题?因此您有如下数据: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
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)