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

标签 python pandas

我的数据是这样的:

        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/

相关文章:

Python:使用 "with"动态定义新函数

python - 如何通过python脚本读取用户登录密码?

python - 即使在 Pandas 中使用 .loc 后也会收到 SettingWithCopyWarning 警告

python - 在Python中从数据帧创建字典

Python 网页抓取 : how to skip url error

python - 用于建模纸牌游戏的现成 Javascript 库?

python - Python 中是否有 raise foo, bar 的用例?

Python matplotlib 多条

python-3.x - 过滤 Pandas 数据框行

python - for 循环内的 dataframe.replace()