我有一个清单:
ac = [2,3,4]
我想要一个DataFrame中的所有内容,除了list ac。
中提到的行我试过了:
dataframe.iloc[:-a, :]
但我收到了错误。
我该怎么办?
答案 0 :(得分:1)
我认为需要默认RangeIndex
按Index.difference
列表ac
获取索引值的值,然后按DataFrame.loc
选择:
df = pd.DataFrame({'A':list('abcdef'),
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,4],
'F':list('aaabbb')})
print (df)
A B C D E F
0 a 4 7 1 5 a
1 b 5 8 3 3 a
2 c 4 9 5 6 a
3 d 5 4 7 9 b
4 e 5 2 1 2 b
5 f 4 3 0 4 b
ac = [2,3,4]
idx = df.index.difference(ac)
df = df.loc[idx]
print (df)
A B C D E F
0 a 4 7 1 5 a
1 b 5 8 3 3 a
5 f 4 3 0 4 b
按位置过滤的所有索引的常规解决方案在列表ac
中使用numpy.setdiff1d
和numpy.arange
进行定义,并按DataFrame.iloc
选择:
df = pd.DataFrame({'A':list('abcdef'),
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,4],
'F':list('aaabbb')}, index=list('ABCDEF'))
print (df)
A B C D E F
A a 4 7 1 5 a
B b 5 8 3 3 a
C c 4 9 5 6 a
D d 5 4 7 9 b
E e 5 2 1 2 b
F f 4 3 0 4 b
ac = [2,3,4]
pos = np.setdiff1d(np.arange(len(df.index)), ac)
df = df.iloc[pos]
print (df)
A B C D E F
A a 4 7 1 5 a
B b 5 8 3 3 a
F f 4 3 0 4 b