如何从DataFrame列中的名称中删除数字和/或括号

时间:2016-12-14 20:50:56

标签: python pandas

在我的专栏中,我有几个国家/地区名称,其名称中包含我需要删除的数字和/或括号。

例如:

- '玻利维亚(多民族国)'应该是'玻利维亚'

- '瑞士17'应该是'瑞士'

如果影响了某些事情,那么有问题的列也被设置为我的索引?

4 个答案:

答案 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)