为的输出指定列名系列结构摘录()

2024-10-08 23:18:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用

df[colname].str.extract(regex) 

将一列字符串解析为几列。我希望能够同时分配列名,例如:

df[colname].str.extract(regex, columns=cnames) 

其中:

cnames = ['col1','col2','col3']
regex = r'(sometext\w)_(aa|bb)_(\d+-\d)'

它可能与笨重的结构,如:

df[colname].str.extract(regex).rename(columns = dict(zip(range(len(cnames)),cnames)))

或者我可以将列名作为命名组嵌入正则表达式中,这样正则表达式将更改为:

regex = r'(?P<col1>sometext\w)_(?P<col2>aa|bb)_(?P<col3>\d+-\d)'

我是不是漏掉了什么,有没有更简单的办法? 谢谢


Tags: columns字符串dfextract结构regexcol2col3
1条回答
网友
1楼 · 发布于 2024-10-08 23:18:17

将这些名称嵌入正则表达式是一种正确的方法。它声明在documentation中这样做。你知道吗

如果您已经有了一些名为012的列,那么使用.rename()的第一个解决方案就不可靠了。你知道吗

在我看来,regex解决方案是最好的,但是您可以开始使用.pipe()这样的方法来实现函数。然而,正如您将看到的,当您不想要相同的regex时,它开始变得混乱。你知道吗

def extract_colnames(df, column, sep, cnames, drop_col=True):
    if drop_col:
        drop_col = [column]
    else:
        drop_col = []
    regex = '(?P<' + ('>.*)' + sep + '(?P<').join(cnames) + '>.*)'
    return df.join(df.loc[:, column].str.extract(regex, expand=True)).drop(drop_col, axis=1)

cnames = ['col1','col2','col3']
data = data.pipe(extract_colnames, column='colname',
                 sep='_', cnames=cnames, drop_col=True)

相关问题 更多 >

    热门问题