我的数据如下所示:
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
我尝试了多种方法,但到目前为止都没有成功:
df.stack().str.extract('^([\w]+:[\w]+:[\w]+)').unstack()[0]
但是,对于这种情况,它不能捕获只有1:
的字符串并返回NaN
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
,并抛出一个错误
你能告诉我如何处理这个案子吗?多谢各位
有了你们展示的样品,你们能试一下下面的吗。简单的解释是:使用replace函数并提及regex来匹配2位冒号2位冒号2位冒号2位,并根据OP的示例将所有其他内容保留为不需要
输出如下:
DataFrame.replace
正则表达式详细信息:
^
:在行的开始处断言位置(\w+:\w+:\w+)
:第一个捕获组\w+
:匹配任意单词字符一次或多次:
:按字面意思匹配字符:
(:.+)
:第二个捕获组:
:按字面意思匹配字符:
.+
:匹配任意字符一次或多次?
:在0和1之间匹配上一个标记请参阅联机^{}
相关问题 更多 >
编程相关推荐