Python 选择多列并根据列表删除值
我有一个数据框,看起来像这样:Python 选择多列并根据列表删除值,python,pandas,Python,Pandas,我有一个数据框,看起来像这样: StudentID Name Assignment1 Assignment2 Assignment3 0 s1 user1 7 7 -3 1 s2 user2 2 15 10 2 s3 user3 12 10 10 3 s4 use
StudentID Name Assignment1 Assignment2 Assignment3
0 s1 user1 7 7 -3
1 s2 user2 2 15 10
2 s3 user3 12 10 10
3 s4 user4 6 2 10
4 s5 user5 -2 7 2
我想选择赋值
值,仅限于此列表中的值:
[-3,0,2,4,7,10,12]
所以我想得到的结果是:
Error_values:
StudentID Name Assignment1 Assignment2 Assignment3
1 s2 user2 2 15 10
3 s4 user4 6 2 10
4 s5 user5 -2 7 2
Correct_values:
StudentID Name Assignment1 Assignment2 Assignment3
0 s1 user1 7 7 -3
2 s3 user3 12 10 10
到目前为止,我可以通过
def loadData(filename):
raw_data = pd.read_csv(filename)
return raw_data
def checkErrorsData(raw_data):
df = pd.DataFrame(np.array(raw_data), columns=raw_data.columns)
duplicated_Id = df[df.duplicated('StudentID', keep=False)]
error_data = df[df['Assignment1'].isin([-3,0,2,4,7,10,12])]
return duplicated_Id, error_data
但是,这需要处理每个列,如何在不键入标签的情况下对所有列执行此操作?您可以使用
.loc
创建包含所有赋值的子数据帧。然后使用isin
和all
来识别哪些包含所有目标测试值(为行指定axis=1)
或者,假设您有三项任务:
assignments = 3
>>> df[df.iloc[:, 2:(2+1+assignments)].isin(target_test_values).all(axis=1)]
StudentID Name Assignment1 Assignment2 Assignment3
0 s1 user1 7 7 -3
2 s3 user3 12 10 10
如果过去的分配没有更多的列,您可以简单地按如下方式编制索引:
df[df.iloc[:, 2:].isin(target_test_values).all(axis=1)]
mask = df.iloc[:, 2:].isin(target_test_values).all(axis=1)
correct_values = df[mask]
error_values = df[~mask]
要获得错误值,只需使用tilda(~)求反:
>>> df[~df.iloc[:, 2:].isin(target_test_values).all(axis=1)]
StudentID Name Assignment1 Assignment2 Assignment3
1 s2 user2 2 15 10
3 s4 user4 6 2 10
4 s5 user5 -2 7 2
将布尔索引指定给掩码更有效,如下所示:
df[df.iloc[:, 2:].isin(target_test_values).all(axis=1)]
mask = df.iloc[:, 2:].isin(target_test_values).all(axis=1)
correct_values = df[mask]
error_values = df[~mask]
我们可以看看你的代码,看看你是否在正确的轨道是的,只是编辑它,谢谢!谢谢但是如果我有
n个赋值
,并且我不能键入所有列标签,会发生什么呢?我几乎使用了索引赋值,但为了清晰起见选择了标签。您可以使用df[df.iloc[:,2:(2+1+n)].isin(目标测试值)。all(axis=1)]
其中n
是分配的数量。见编辑。嘿,谢谢。它工作正常,感谢进一步的研究,我假设tilda否定也可以得到错误值。我还将包括一个稍微高效的版本。