我的系统是python3.6,具有numpy 1.16.2,scipy 1.2.1,matplotlib 3.0.3
import pandas as pd
import numpy
df=pd.DataFrame({'col1':['a','b','c'],'col2':['d',numpy.NaN,'c'],'col3':['c','b','b']})
df = df.astype({"col2": 'category'})
print(df)
以上脚本的输出为:
col1 col2 col3
0 a d c
1 b NaN b
2 c c b
我想找到系列col2
中非空项目的索引,其类别不在['a','b','c']
在这种情况下,d
不是null
并且不在['a','b','c']
中,则预期结果应该是d
的索引,即{{1} }
我的解决办法是打击:
0
我的解决方案脚本的输出是:
getindex=numpy.where(~df['col2'].isin(['a','b','c']) & df['col2'].notna())
#if getindex is not empty, print it
if not all(getindex):
print(getindex)
答案 0 :(得分:2)
使用:
getindex=df.index[(~df['col2'].isin(['a','b','c']) & df['col2'].notna())]
print (getindex)
Int64Index([0], dtype='int64')
如果要选择的第一个值不存在错误(如果值不存在)
print (next(iter(getindex), 'no match'))
0
如果要使用if empty
语句,请使用Index.empty
进行测试:
if not getindex.empty:
print (getindex)
如果为列表中的第一个数组添加[0]
,则您的解决方案应该可以工作:
getindex=np.where(~df['col2'].isin(['a','b','c']) & df['col2'].notna())[0]
print (getindex)
[0]
答案 1 :(得分:1)
请根据情况进行修改
getindex=np.where(~df['col2'].isin(['a','b','c']) & df['col2'].notna())
if any(~df['col2'].isin(['a','b','c']) & df['col2'].notna()): # change here to any
print(getindex)
(array([0], dtype=int64),)
也基于您的单词#if getindex is not empty, print it
if len(getindex)!=0:
print(getindex)
(array([0], dtype=int64),)