【问题标题】:How to take part of string value from column in DataFrame in Python Pandas?如何从 Python Pandas 的 DataFrame 中的列中获取字符串值的一部分?
【发布时间】:2022-08-18 21:15:59
【问题描述】:

我在 Python Pandas 中有 DataFrame,如下所示(\"col1\" 是字符串数据类型):

col1
-------
ACC_P:Indiv|ACC_K:3886|GROUP:gr1|COK:P1K
ACC_P:Group|ACC_K:42|GROUP:gr2|COK:P1C
ACC_P:Indiv|ACC_K:455|GROUP:gpk22|COK:AD2
...

我需要创建新列 \"col2\",其中只有 \"GROUP:\" 和 \"|\" 之间的值来自 \"col1\" 中的值,因此我需要如下所示的内容:

col1                                        | col2
--------------------------------------------|-------
ACC_P:Indiv|ACC_K:3886|GROUP:gr1|COK:P1K    | gr1
ACC_P:Group|ACC_K:42|GROUP:gr2|COK:P1C      | gr2
ACC_P:Indiv|ACC_K:455|GROUP:gpk22|COK:AD2   | gpk22
...                                         | ...

我怎样才能在 Python Pandas 中做到这一点?

    标签: python pandas string dataframe extract


    【解决方案1】:

    您可以使用正则表达式来提取它。类似于在 GROUP 之后捕获所有内容:直到 |

    df['col2'] = df.col1.str.extract('GROUP:(.*)\|')
    

    如果您不熟悉正则表达式,则另一个不太优雅但可能更直观的选择。

    在管道上拆分,从最后一个项目中取出第二个,在 : 上拆分,然后从中取出最后一个元素。这当然只有在您的 col1 值的结构始终遵循相同格式时才有效。

    df.col1.str.split('|').str[-2].str.split(':').str[-1]
    

    输出

                                            col1   col2
    0   ACC_P:Indiv|ACC_K:3886|GROUP:gr1|COK:P1K    gr1
    1     ACC_P:Group|ACC_K:42|GROUP:gr2|COK:P1C    gr2
    2  ACC_P:Indiv|ACC_K:455|GROUP:gpk22|COK:AD2  gpk22
    

    【讨论】:

      【解决方案2】:

      更优雅的方法是通过正则表达式,但这是我的两分钱:

      d.col1.str.split('GROUP:').apply(lambda x: x[1].split('|')[0])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-09
        • 2017-09-20
        • 1970-01-01
        • 2022-11-25
        • 1970-01-01
        • 1970-01-01
        • 2019-07-25
        • 2020-06-04
        相关资源
        最近更新 更多