Python 如果一行包含列表中的所有项,如何获取该行的索引?
我有一些excel文件,它们的结构并不总是相同的;因此,我正在读取带有headers=None参数的pandas数据帧 然后我做了一些检查以获得标题行索引位置。 在传递行索引之前,我有一个必须检查的列列表Python 如果一行包含列表中的所有项,如何获取该行的索引?,python,python-2.7,pandas,numpy,dataframe,Python,Python 2.7,Pandas,Numpy,Dataframe,我有一些excel文件,它们的结构并不总是相同的;因此,我正在读取带有headers=None参数的pandas数据帧 然后我做了一些检查以获得标题行索引位置。 在传递行索引之前,我有一个必须检查的列列表 mandatory\u cols=['items','name','email'] 我的数据帧: 0 NaN NaN NaN NaN 1 NaN NaN NaN NaN 2 NaN NaN
mandatory\u cols=['items','name','email']
我的数据帧:
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 items email name store
4 2 test Mike 2
我需要返回3
,因为第3行包含我列表中包含的所有项目。如果缺少,则返回None
我已经看过了df.isin(必填项)
,但它似乎只返回布尔值的数据帧,我似乎不知道如何只获取索引
需要注意的是,文件中的列位置可能不符合顺序,因此我需要能够通过此检查动态查看所有列。此外,行可以包含的不仅仅是强制的列,只要它具有我想要的索引位置的所有强制列
谢谢 IIUC,您应该使用
issubset
,而不是isin
df[[set(mandatory_cols).issubset(x) for x in df.values.tolist()]].index
Out[1098]: Int64Index([3], dtype='int64')
IIUC,您应该使用
issubset
,而不是isin
df[[set(mandatory_cols).issubset(x) for x in df.values.tolist()]].index
Out[1098]: Int64Index([3], dtype='int64')
如果您不想列出所有df值(可能非常大),也可以使用
apply
:df.apply(lambda k:set(强制)。issubset(k),1)
@RafaelC如果您测试速度,apply比for Loop慢,但它会使用同样多的内存吗?@RafaelC如果可以,您可以测试它:-)并可以自由编辑时间返回:-)谢谢,看到差异会很有趣!如果您不想列出所有df值(可能非常大),也可以使用apply
:df.apply(lambda k:set(强制)。issubset(k),1)
@RafaelC如果您测试速度,apply比for Loop慢,但它会使用同样多的内存吗?@RafaelC如果可以,您可以测试它:-)并可以自由编辑时间返回:-)谢谢,看到差异会很有趣!