我有一个像这样的数据框:
Col0 Col1 Col2 Col3
1 a b g a
2 a d z a
3 a g x a
4 a h p a
5 a b c a
Run Code Online (Sandbox Code Playgroud)
我需要删除值为“a”的列。没有其他单元格包含值“a”(例如,此处 Col1 和 Col2 将没有值为“a”的单元格)。我有大约 1000 列,我不确定所有列的值都为“a”。所需的数据框应该是这样的。,
Col1 Col2
1 b g
2 d z
3 g x
4 h p
5 b c
Run Code Online (Sandbox Code Playgroud)
做到这一点的最佳方法是什么?
使用anyif 需要检查是否至少有一个True或all如果需要检查所有Truesboolean indexing和loc,因为过滤列:
print (df)
Col0 Col1 Col2 Col3
0 a a g a
1 a d z a
2 a g x a
3 a h p a
4 a b c a
df2 = df.loc[:, ~(df == 'a').any()]
print (df2)
Col2
0 g
1 z
2 x
3 p
4 c
df1 = df.loc[:, ~(df == 'a').all()]
print (df1)
Col1 Col2
0 a g
1 d z
2 g x
3 h p
4 b c
Run Code Online (Sandbox Code Playgroud)
细节:
print (df == 'a')
Col0 Col1 Col2 Col3
0 True True False True
1 True False False True
2 True False False True
3 True False False True
4 True False False True
Run Code Online (Sandbox Code Playgroud)
df2 = df.loc[:, (df != 'a').any()]
print (df2)
Col1 Col2
0 a g
1 d z
2 g x
3 h p
4 b c
df1 = df.loc[:, (df != 'a').all()]
print (df1)
Col2
0 g
1 z
2 x
3 p
4 c
print (df != 'a')
Col0 Col1 Col2 Col3
0 False False True False
1 False True True False
2 False True True False
3 False True True False
4 False True True False
Run Code Online (Sandbox Code Playgroud)
编辑:
对于检查混合类型 - 带字符串的数字是 2 种可能的解决方案,将全部转换为strings 或比较 numpy 数组:
df.astype(str) == 'a'
Run Code Online (Sandbox Code Playgroud)
或者:
df.values == 'a'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |