在我的专栏中,我有几个国家/地区名称,其名称中包含我需要删除的数字和/或括号。
例如:
- '玻利维亚(多民族国)'应该是'玻利维亚'
- '瑞士17'应该是'瑞士'
如果影响了某些事情,那么有问题的列也被设置为我的索引?
答案 0 :(得分:2)
试试这个:
In [121]: df
Out[121]:
expected
Bolivia (Plurinational State of) Bolivia
Switzerland17 Switzerland
In [122]: df.set_index(df.index.str.replace('\s*\(.*?\)\s*', '').str.replace('\d+',''), inplace=True)
In [123]: df
Out[123]:
expected
Bolivia Bolivia
Switzerland Switzerland
In [124]: df.index == df.expected
Out[124]: array([ True, True], dtype=bool)
In [125]: (df.index == df.expected).all()
Out[125]: True
答案 1 :(得分:0)
def remove_digit(data):
newData = ''.join([i for i in data if not i.isdigit()])
i = newData.find('(')
if i>-1: newData = newData[:i]
return newData.strip()
energy['Country'] = energy['Country'].apply(remove_digit)
答案 2 :(得分:0)
一种无需调用索引即可实现的方法。
import re
df.apply(lambda x : re.sub('\s*\(.*?\)\s*|\d+', '', x))
答案 3 :(得分:0)
def remove(data):
for i in range(len(data)):
if data[i].isdigit():
return data[:i]
elif (data[i]=='('):
return data[:i-1]
return data
df['Country'] = df['Country'].apply(remove)