筛选DataFrame特定格式行并提取指定字段的有效方法
解决方法
直接用Pandas的字符串正则匹配和提取功能就能搞定,分两步走:
1. 筛选符合格式的行
先把带「路径+两组冒号分隔数字」的行挑出来,用str.contains配合正则表达式精准匹配:
# 筛选符合格式的条目:行尾满足「冒号+空格+路径+冒号+数字+冒号+数字」结构 filtered_df = df[df['LineEntry'].str.contains(r': /[^:]+:\d+:\d+$')]
正则说明:r': /[^:]+:\d+:\d+$' 里,[^:]+匹配不含冒号的路径部分,\d+匹配数字,$锚定行尾,确保只匹配完全符合要求的行。
2. 提取最后两个冒号分隔的数字
用str.extract直接从筛选后的行里提取两个数字,自动生成新列:
# 把两个数字分别提取到num1和num2列 filtered_df[['num1', 'num2']] = filtered_df['LineEntry'].str.extract(r': (\d+):(\d+)$')
这里的正则r': (\d+):(\d+)$'会精准捕获行末尾的两组数字,分组后自动映射到新列中。
一步到位的简化写法
也可以直接提取,同时过滤掉提取失败的行(结果为NaN的行):
# 提取数字并生成新列 df[['num1', 'num2']] = df['LineEntry'].str.extract(r': (\d+):(\d+)$') # 移除提取无效的行 df = df.dropna(subset=['num1', 'num2'])
你之前用re.split报错,是因为不符合格式的行冒号数量不足,取res[3]、res[4]会触发索引越界。用正则匹配+提取的方式更稳妥,既能精准定位目标内容,还能自动过滤无效行。
内容的提问来源于stack exchange,提问作者user1846251
相关产品推荐
相关产品推荐

