繁体   English   中英

查找熊猫数据框中首次出现的特定部分字符串的索引位置

[英]Find index location of first occurrence of a specific partial string in pandas dataframe

提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文

我正在使用AFRINIC Whois数据。 我正在尝试查找第一次出现的子字符串的位置。 在示例中(熊猫数据框的左侧有一列“数据”是索引),我试图找到子字符串“ inetnum”。 因此,我正在寻找的结果是“ 2750383”。

    data
20  mnt-lower: info
21  changed: info
22  changed: info
23  changed: info
24  changed: info
25  source: info
26  as-block: info
27  type: info
28  descr: info
29  remarks: info
... ...
2750381 changed: info
2750382 source: info
2750383 inetnum: info
2750384 netname: info
2750385 descr: info
2750386 country: info
2750387 admin-c: info
2750388 tech-c: info
2750389 status: info

我努力了:

afrinic.data.ne('inetnum').idxmax()

但这给了我“ []”,因为它正在寻找第一个完整的字符串并产生0个结果。

我也尝试过:

indices = [i for i, s in enumerate(afrinic.data) if 'inetnum' in s]

但这给了我单词“ inetnum”的每个索引号,而我要查找的只是第一个实例索引号。 我可以列出该列表,而仅使用头号,但是必须有一种更好的方法来做到这一点。 任何帮助是极大的赞赏。

使用str.contains在任何位置进行检查:

out = afrinic.data.str.contains('inetnum').idxmax()
print (out)
2750383

str.startswith用于测试每个字符串的开始:

out = afrinic.data.str.startswith('inetnum').idxmax()

编辑:

如果没有匹配的值,更通用的解决方案:

m = afrinic.data.str.contains('inetnum')
out = m.idxmax() if m.any() else 'no match'

你很亲密 next与生成器表达式一起使用:

first_index = next((i for i, s in enumerate(afrinic.data) if 'inetnum' in s), None)

如果找不到有效的索引,则next会根据fallback参数返回None

对于较大的数据框(希望在系列开头附近进行匹配),将next与手动迭代配合使用将比基于Pandas / NumPy的方法更有效。 否则,您可以按照@jezrael的解决方案使用pd.Series.str方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM