从熊猫数据框开始,例如
import pandas as pd
df = pd.DataFrame(
[[0, 3, 1.4, 3], [0, 3, 1.3, 1], [0, 3, 0.5, 3]]
)
或视觉上:
0 1 2 3
0[[0, 3, 1.4, 3]
1 [0, 3, 1.3, 1]
1 [0, 3, 0.5, 3]]
并赋予特殊值x_1=3
想出一种DataFrame来删除df中所有行中具有恒定值x的所有列的聪明且可扩展的方法是什么?
此示例中的结果将是没有第1列的dataFrame df。
df_altered =
0 1 2
0[[0, 1.4, 3]
1 [0, 1.3, 1]
2 [0, 0.5, 3]]
在一个小的DataFrame中,我可以遍历每一列的所有行,但是不能缩放并使用大型DataFrame。
答案 0 :(得分:3)
您可以使用<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
:
pd.drop()
输出:
df.drop(columns=df.columns[(df == 3).all()])
答案 1 :(得分:1)
一种方法是使用以下方法确定具有相等值的列:
>>> (df == df.iloc[0]).all(axis=0)
0 True
1 True
2 False
3 False
dtype: bool
然后提取上述蒙版的逆:
>>> df.iloc[:, ~(df == df.iloc[0]).all(axis=0).to_numpy()]
2 3
0 1.4 3
1 1.3 1
2 0.5 3
答案 2 :(得分:0)
您可以尝试以下方法:
## find the unique val in each column
no_unique_val = df.nunique()
val = 3
for column_name in no_unique_val.index:
if 1 == no_unique_val[column_name] and val == df[column_name].values[0]:
df.drop(column_name,axis=1, inplace=True)
输出:
答案 3 :(得分:0)
您可以先使用an example of how it should look 2,然后再使用df.ne
作为布尔掩码
df.loc[:, df.ne(3).any()]
0 2 3
0 0 1.4 3
1 0 1.3 1
2 0 0.5 3