python - 获取 pandas 数据框中正则表达式匹配的索引不起作用

标签 python regex pandas

我有一个 Excel 工作表,我正在将其读入 pandas 中进行解析和后续分析。它具有以下格式。所有值都是字符串。它们稍后将被转换为 float /整数,但将它们作为字符串有助于解析。

column1  |  column2 | column3 |
-----------------------------
12345   |10         |20       |
txt     |25         |65       |
35615   |15         |20       |
txt     |35         |20       |

我需要获取第1列中所有5位数字的索引。它始终是 5 位数。我正在使用以下正则表达式。

\b\d{5}\b

在使用任何内置字符串方法时,我无法让 pandas 正确匹配 5 位数字。

我已经尝试过以下方法。

df.column1.str.contains('\b\d{5}\b', regex=True).index.list()
df.column1.str.match('\b\d{5}\b').index.list()

我期待它回来

[0,2]

这两个都返回一个空列表。我究竟做错了什么?

最佳答案

在字符串前添加r,按boolean indexing过滤并获取要列出的索引值:

i = df[df.column1.str.contains(r'\b\d{5}\b')].index.tolist()
print (i)
[0, 2]

或者,如果只想解析长度为 5 的数值,请使用 ^$ 更改正则表达式作为字符串的开头和结尾:

i = df[df.column1.str.contains(r'^\d{5}$')].index.tolist()

关于python - 获取 pandas 数据框中正则表达式匹配的索引不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59916417/

相关文章:

python - 如何在 Python 中创建 IntPtr?

python - 属性错误: 'ResultSet' object has no attribute 'encode'

python - Pandas - 对非日期时间重新采样

python - 将 pd.value_counts() 和定义的变量附加到一行数据帧

regex - 永远不会被任何东西匹配的正则表达式

python - 替换符合条件的所有单元格的内容

javascript - websocket握手问题

python - TensorFlow - 从 TFRecords 文件中读取视频帧

java - Java 中使用 contains 不匹配字符串

Javascript 将不同格式的字符串转换为 Json