在pandas数据帧上应用过滤器并将同一列替换在一起

sun*_*nny 3 python dataframe pandas

以下是示例数据帧

df = pd.DataFrame([["aa_1_a", 9],["bb_2_b", 2], ["3_c", 7], ["dd_4_d", 5]], columns=['A', 'B'])

>>> df
        A  B
0  aa_1_a  9
1  bb_2_b  2
2  3_c     7 <-- invalid row based on some regex
3  dd_4_d  5
Run Code Online (Sandbox Code Playgroud)

在列AI上需要执行一些regax验证,需要提取数字并替换相同的列

预期产量:

    A  B
 0  1  9
 1  2  2
 3  4  5
Run Code Online (Sandbox Code Playgroud)

我设法通过应用过滤器来验证正则表达式和执行替换功能以获得高于输出.

无论如何,以简单的方式获得预期的输出

提前致谢.

use*_*203 5

使用pandas.Series.str.extract然后删除空行:

df.assign(A=df.A.str.extract(r'[a-z]{2}\_(\d+)\_[a-z]')).dropna()

   A  B
0  1  9
1  2  2
3  4  5
Run Code Online (Sandbox Code Playgroud)

您可能需要更改正则表达式,这里是我选择的解释:

[a-z]{2}              # matches two lowercase characters a-z
\_                    # matches an underscore
(\d+)                 # matches one or more digits
\_                    # matches an underscore
[a-z]                 # matches a single character a-z
Run Code Online (Sandbox Code Playgroud)

以下是使用后系列的中间可视化str.extract:

df.A.str.extract(r'[a-z]{2}\_(\d+)\_[a-z]')

     0 
0    1 
1    2 
2  NaN 
3    4 
Run Code Online (Sandbox Code Playgroud)

其中一个匹配的任何行没有找到结果NaN,我们再在最后一步下降.