Python 查找数据帧中特定部分字符串第一次出现的索引位置

Python 查找数据帧中特定部分字符串第一次出现的索引位置,python,pandas,dataframe,Python,Pandas,Dataframe,我在和一个叫whois的人合作。我正在尝试查找子字符串第一次出现的位置。在这个示例中(dataframe左侧有一列“data”是索引),我试图找到子字符串“inetnum”。所以我想要的结果是“2750383” 我试过: afrinic.data.ne('inetnum').idxmax() 但这给了我“[]”,因为它正在查找第一个完整字符串并生成0个结果 我也尝试过: indices = [i for i, s in enumerate(afrinic.data) if 'inetnum'

我在和一个叫whois的人合作。我正在尝试查找子字符串第一次出现的位置。在这个示例中(dataframe左侧有一列“data”是索引),我试图找到子字符串“inetnum”。所以我想要的结果是“2750383”

我试过:

afrinic.data.ne('inetnum').idxmax()
但这给了我“[]”,因为它正在查找第一个完整字符串并生成0个结果

我也尝试过:

indices = [i for i, s in enumerate(afrinic.data) if 'inetnum' in s]
但这给了我单词“inetnum”的每个索引号,而我要查找的只是第一个实例索引号。我可以选择这个列表,只使用最上面的数字,但必须有更好的方法来做到这一点。非常感谢您的帮助。

在任何位置都可以使用:

out = afrinic.data.str.contains('inetnum').idxmax()
print (out)
2750383
或对于每个字符串的测试开始:

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

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

m = afrinic.data.str.contains('inetnum')
out = m.idxmax() if m.any() else 'no match'
用于任何位置的检查:

out = afrinic.data.str.contains('inetnum').idxmax()
print (out)
2750383
或对于每个字符串的测试开始:

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)
如果未找到有效索引,则根据fallback参数,
next
将返回
None


对于更大的数据帧,如果您希望在系列开始时匹配,则使用手动迭代的
next
将比基于Pandas/NumPy的方法更有效。否则,您可以根据@jezrael的解决方案使用
pd.Series.str
方法。

您非常接近。将
next
与生成器表达式一起使用:

first_index = next((i for i, s in enumerate(afrinic.data) if 'inetnum' in s), None)
如果未找到有效索引,则根据fallback参数,
next
将返回
None


对于更大的数据帧,如果您希望在系列开始时匹配,则使用手动迭代的
next
将比基于Pandas/NumPy的方法更有效。否则,您可以按照@jezrael的解决方案使用
pd.Series.str
方法。

这正是我想要的@Jezrael请注意,如果没有找到字符串,
idxmax
的结果将为0。如果这是相关的,您可能需要添加额外的检查。如果列中有
NaN
,我会得到错误:
TypeError:reduction operation'argmax'不允许用于此数据类型
,这正是我要找的@Jezrael请注意,如果没有找到字符串,
idxmax
的结果将为0。如果这是相关的,您可能需要添加一个额外的检查。如果列中有
NaN
,我会得到错误:
TypeError:此数据类型不允许使用缩减操作“argmax”