Python 删除所有行的行值为常量的数据帧列
从数据帧开始,例如Python 删除所有行的行值为常量的数据帧列,python,pandas,dataframe,Python,Pandas,Dataframe,从数据帧开始,例如 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 什么是一种智能的、可伸缩的方法来生成一个数据帧,该数据帧删除df中每行具有常量值x的所有列 本例中的结果是
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
什么是一种智能的、可伸缩的方法来生成一个数据帧,该数据帧删除df中每行具有常量值x的所有列
本例中的结果是没有列1的数据帧df
df_改变=
0 1 2
0[[0, 1.4, 3]
1 [0, 1.3, 1]
2 [0, 0.5, 3]]
在一个小数据帧中,我可以为每个列对所有行进行写入,但这不能扩展并处理大数据帧。您可以使用pd.drop:
输出:
0 2 3
0 0 1.4 3
1 0 1.3 1
2 0 0.5 3
一种方法是使用以下方法确定具有相等值的列:
>>> (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
您可以尝试以下方法:
## 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)
输出:
可以将和用作布尔掩码
df.loc[:, df.ne(3).any()]
0 2 3
0 0 1.4 3
1 0 1.3 1
2 0 0.5 3
您的标题与描述不匹配。为什么0列没有被删除?@MateenUlhaq似乎他忘了删除0列。很遗憾你删除了你的答案,因为我对解决方案很好奇。他在问题中说,给定一个特殊值:x=3,删除所有行中包含该值的列。因此,不应删除包含所有0值的列。您的答复帮助我了解了其中的内容比我最初意识到的要多。谢谢。
df.loc[:, df.ne(3).any()]
0 2 3
0 0 1.4 3
1 0 1.3 1
2 0 0.5 3