gpt4 book ai didi

python - Pandas:在最大第 n 个定界符之后提取字符串

转载 作者:行者123 更新时间:2023-12-01 23:26:11 24 4
gpt4 key购买 nike

我的数据是这样的:

        A_1         A_2         B_1         B_2         C_1         C_2
DP0001 11:01:01 11:01:01 15:35 51:02:01 07:02:04 15:02:01:01
DP0002 02:01:01:02 26:01:01 35:01:01:01 40:01:02 04:82 08:01:01
DP0003 11:01:01 11:01:01:01 15:02:01 56:04 01:02:01 08:01:01
DP0004 11:01:01 34:01:01 15:02:01 15:12 03:03:01:03 08:01:01

我想提取最多3个:之前的字符串。期望输出:

        A_1         A_2         B_1         B_2         C_1         C_2
DP0001 11:01:01 11:01:01 15:35 51:02:01 07:02:04 15:02:01
DP0002 02:01:01 26:01:01 35:01:01 40:01:02 04:82 08:01:01
DP0003 11:01:01 11:01:01 15:02:01 56:04 01:02:01 08:01:01
DP0004 11:01:01 34:01:01 15:02:01 15:12 03:03:01 08:01:01

我尝试了多种方法,但到目前为止都没有成功:

  1. 使用正则表达式:
    df.stack().str.extract('^([\w]+:[\w]+:[\w]+)').unstack()[0]

但是,它无法捕获只有 1 个 : 的字符串并在这种情况下返回 NaN。

  1. 使用拆分然后加入策略
    def six_digits(df_columns):
return df_columns.str.split(':', expand=True).iloc[:, :3].apply(':'.join, axis=1)

df.apply(lambda x: six_digits(x))

然后它在只有 : 的单元格中遇到 None 并抛出错误。

你能告诉我如何处理这个案子吗?谢谢

最佳答案

DataFrame.replace

df.replace(r'^(\w+:\w+:\w+)(:.+)?', r'\1', regex=True)

             A_1       A_2       B_1       B_2       C_1       C_2
DP0001 11:01:01 11:01:01 15:35 51:02:01 07:02:04 15:02:01
DP0002 02:01:01 26:01:01 35:01:01 40:01:02 04:82 08:01:01
DP0003 11:01:01 11:01:01 15:02:01 56:04 01:02:01 08:01:01
DP0004 11:01:01 34:01:01 15:02:01 15:12 03:03:01 08:01:01

正则表达式详细信息:

  • ^ : 在行首声明位置
  • (\w+:\w+:\w+) :第一个捕获组
    • \w+ : 匹配任何单词字符一次或多次
    • : : 匹配字符 : literally
  • (:.+) : 第二个捕获组
    • : : 匹配字符 : literally
    • .+ : 匹配任意字符一次或多次
  • ? :匹配前一个标记在零到一次之间

在线查看regex demo

关于python - Pandas:在最大第 n 个定界符之后提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67211118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com