如何在 pandas DataFrame 中的字符串模式后提取数字并在 python 中创建新功能

Posted

技术标签:

【中文标题】如何在 pandas DataFrame 中的字符串模式后提取数字并在 python 中创建新功能【英文标题】:How to extract numbers after string pattern in pandas DataFrame & create to new feature in python 【发布时间】:2021-08-15 15:30:47 【问题描述】:

根据列值创建新特征

例子

Column 


CHPS CHTN 28 GR 1 ITEM

CHPS CHTN 28 GR 1 ITEM

样本输出

Column                         A      B


CHPS CHTN 28 GR 1 ITEM        28          1

CHPS CHTN 28 GR 4 ITEM        28          4

【问题讨论】:

【参考方案1】:

如果你最多提取2个数字,你可以使用简单的单行代码,如下:

df.join(df['Column'].str.extract(r'\D*(?P<A>\d+)\D+(?P<B>\d+)'))

这里,列标签自动从str.extract() 调用中使用的正则表达式的命名捕获组的名称传播。

结果:

                   Column   A  B
0  CHPS CHTN 28 GR 1 ITEM  28  1
1  CHPS CHTN 28 GR 1 ITEM  28  1

【讨论】:

【参考方案2】:

您可以使用str.extractallrename 更改列名。

from string import ascii_uppercase
import pandas as pd




alpha_cols = dict(
                 enumerate(ascii_uppercase)
                 )


df1  = df.join(df['Column'].str.extractall('(\d+)')\
                    .unstack(1).droplevel(0,1))\
                    .rename(columns=alpha_cols)

print(df1)

                   Column   A  B
0  CHPS CHTN 28 GR 1 ITEM  28  1
1  CHPS CHTN 28 GR 1 ITEM  28  1

【讨论】:

以上是关于如何在 pandas DataFrame 中的字符串模式后提取数字并在 python 中创建新功能的主要内容,如果未能解决你的问题,请参考以下文章

如何从列类型列表中删除 pandas DataFrame 中的空值

如何检查一系列字符串是不是包含在 PANDAS DataFrame 列中并将该字符串分配为行中的新列?

Python/Pandas:如何将字符串列表与 DataFrame 列匹配

如何在 pandas DataFrame 中的字符串模式后提取数字并在 python 中创建新功能

如何将“字节”对象转换为 Pandas Dataframe、Python3.x 中的文字字符串?

Pandas:如何在第二个 DataFrame 的另一列中查找子字符串位置