消除pandas中索引字符串条目中的括号

时间:2017-03-14 03:54:56

标签: python string pandas dataframe

我有一个数据框,其中一些索引包含不需要的字符,主要是括号“(”。循环需要遍历每一行并消除“(”及其后的所有内容。

func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Insert code here to initialize your application
        guard let window = NSApplication.shared.windows.first else { return }
        window.isOpaque = false
        window.backgroundColor = .clear
}

问题在于它消除了每个条目的额外字符。例如,当索引是abcd时,它会将其更改为abc。如果索引是abcd(blah),那么它将索引条目更改为abcd。如何防止它消除额外的角色?

4 个答案:

答案 0 :(得分:3)

给出如下数据框:

df = pd.DataFrame({'A' : ['one(two)', 'five (three)two', '(blah)two', '1 three  blah haha1'], 'B': [100,200,300,400]})
df = df.set_index('A')


                    B
A   
one(two)            100
five (three)two     200
(blah)two           300
three blah haha1    400

df.index = df.index.str.extract('([\s\w]*)\(*')

会给你

                    B
A   
one                 1
five                2
                    3
three blah haha 1   4

答案 1 :(得分:1)

首先,你应该避免在熊猫中使用循环。它们表现不佳,当你操纵整个数据集而不是迭代for循环中的行时,Pandas会更有效。

假设您只想删除括号

import re
def remove_parentheses(x):
    return re.sub(r'\([^)]*\)', '', x['field'])

然后

df['index'] = df.apply(lambda x: remove_parentheses(x), axis = 1)

答案 2 :(得分:1)

对于index为abcd的情况,它会更改为abc,因为index.rfind("(")返回-1,因为找不到"("。这导致index = index[:-1]

您应该检查索引中的"("何时以及何时不是。你可以这样做:

for index, row in df.iterrows():
    if index.rfind("(") != -1:
        index = index[:index.rfind("(")]

    newindexlist.append(index)

df.index = newindexlist

答案 3 :(得分:1)

如何更简单的东西(尽管使用正则表达式很诱人)

import pandas as pd
import re

pattern = r"(.*)\("
df = pd.DataFrame(index=["abcd(blah)", "abcd",])
print df.index

Index([u'abcd(blah)', u'abcd'], dtype='object')

df = df.reset_index()
df['index'] = df['index'].apply(lambda x: x.split("(")[0])
df.set_index("index", inplace=True)
print df.index

Index([u'abcd', u'abcd'], dtype='object', name=u'index')