大家好,所以我试图删除一系列列,因为第一列有单词' Sea'
1 | 2 | 3 | 4 | 5
10 'sea' 48
15 11 23 25 26
28 26 14 9 21
In [14]: df.columns
Out [14]: Index([0,1,2,3,4,5,6,7],dtype = 'object')
我想要实现的输出:
1 | 5
10 48
15 26
28 21
我到目前为止的代码,因为我的列标题是整数:
for c in df.columns:
if df[c].str.contains(pat = 'Sea'):
df.drop(df.columns[[range(c,c+2)]],axis=1,inplace=True)
然而,这会返回模糊真值的错误。任何帮助表示赞赏
答案 0 :(得分:0)
将第二行更改为:
if any(df[c].str.contains(pat = 'Sea')):
df.str.contains返回一个布尔值列表,指示每行的条件是真还是假。这是模糊真值的错误的起源。通过使用any()函数,您可以将列表转换为一个布尔值。
更新
当您找到“sea”时,您同时删除3列,然后循环要继续删除列,因此键错误。试试这个作为第3行:
df.drop(df.columns[c],axis=1,inplace=True)
答案 1 :(得分:0)
我会使用np.where
来确定违规列的位置
i = np.where((df.values == 'sea').any(0))[0]
cat = np.concatenate([range(c, c + 3) for c in df.columns[i]])
df.drop(np.unique(cat), 1)
1 5
0 10 48
1 15 26
2 28 21
答案 2 :(得分:0)
for num in range(len(df)):
for i in range(len(df.columns)-6): #for countries and id
if pd.Series.any(sh1[num].iloc[:,i].str.contains(pat="Sea")):
df.drop([df].columns[i],df.columns[i+1],
df.columns[i+2]],axis=1,inplace=True)
对我有用。随意清理代码/建议有效的方法