Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:在最大n个分隔符后提取字符串_Python_Pandas - Fatal编程技术网

Python 熊猫:在最大n个分隔符后提取字符串

Python 熊猫:在最大n个分隔符后提取字符串,python,pandas,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:

我的数据如下所示:

        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的字符串:,并返回NaN

  • 使用先分割后加入策略
  • 然后它在单元格中遇到只有
    None
    ,并抛出一个错误

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

    DataFrame。请更换

    正则表达式详细信息:

    • ^
      :在行首断言位置
    • (\w+:\w+:\w+)
      :第一个捕获组
      • \w+
        :匹配任意单词字符一次或多次
      • :按字面意思匹配字符
    • (:.+)
      :第二个捕获组
      • :按字面意思匹配字符
      • +
        :匹配任意字符一次或多次
    • :在零和一次之间匹配上一个标记

    请查看带有所示样本的联机

    ,请尝试以下内容。简单的解释是:使用replace函数并提及regex来匹配2位冒号2位冒号2位冒号2位,并根据OP的示例将所有其他内容保留为不需要

    df.astype(str).replace(r'^((?:\d{2}:){2}\d{2})(.*)', 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
    

    regex中的
    ^([\w]+:){1,3}
    可以解决这个问题,我认为它不起作用,它只产生了第一个
    ([\w]+:[\w]+:?[\w]+)
    前面的数字。这个怎么样?谢谢,它工作得非常好。如果我想稍微扩展一下这个问题,比如从
    11:01:01G
    捕获
    11:01:01
    ,我将正则表达式更改为“^(\w+:\w+:\d+)(:.+)?”,它在正则表达式101上显示要正确捕获,但是当我使用
    df.replace(r'^(\w+:\w+:\d+)(:.+)?”,r'\1',regex=True)
    ,它仍然返回
    11:01:01G
    。如何解决此问题?@ThanhNguyen请检查
    ^(\w+:\w+:\d+)?
    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
    
    df.astype(str).replace(r'^((?:\d{2}:){2}\d{2})(.*)', 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