python - 删除 Pandas 方差低的列

标签 python pandas dataframe drop

我正在尝试删除方差为 0 的 pandas 数据框中的列。 我确定这已在某处得到解答,但我很难找到关于它的话题。我找到了 this thread ,但是,当我为我的数据框尝试解决方案时,baseline 使用命令

baseline_filtered=baseline.loc[:,baseline.std() > 0.0]

我得到了错误

    "Unalignable boolean Series provided as "

IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).

那么,有人可以告诉我为什么会出现此错误或提供替代解决方案吗?

最佳答案

有一些非数字列,所以 std 默认删除这些列:

baseline = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'D':[1,1,1,1,1,1],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
})

#no A, F columns
m = baseline.std() > 0.0
print (m)
B     True
C     True
D    False
E     True
dtype: bool

因此,添加或删除字符串列的可能解决方案是使用 DataFrame.reindex :

baseline_filtered=baseline.loc[:,m.reindex(baseline.columns, axis=1, fill_value=True) ]
print (baseline_filtered)
   A  B  C  E  F
0  a  4  7  5  a
1  b  5  8  3  a
2  c  4  9  6  a
3  d  5  4  9  b
4  e  5  2  2  b
5  f  4  3  4  b

baseline_filtered=baseline.loc[:,m.reindex(baseline.columns, axis=1, fill_value=False) ]
print (baseline_filtered)
   B  C  E
0  4  7  5
1  5  8  3
2  4  9  6
3  5  4  9
4  5  2  2
5  4  3  4

另一个想法是使用 DataFrame.nunique使用字符串和数字列:

baseline_filtered=baseline.loc[:,baseline.nunique() > 1]
print (baseline_filtered)
   A  B  C  E  F
0  a  4  7  5  a
1  b  5  8  3  a
2  c  4  9  6  a
3  d  5  4  9  b
4  e  5  2  2  b
5  f  4  3  4  b

关于python - 删除 Pandas 方差低的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64243938/

相关文章:

python - 从 pandas 数据框中的索引获取前后行

python - 将浮点值更改为整数值,然后在 Pandas 数据框中连接

python - 使用 InterX 函数转换为 python 时出现模块错误

python - 如何按字母从列表中删除多个字符串?

python - 无法在 Pandas 中读取 Excel 文件

Python 长列表目录 (ls -l), ls *

python - 创建自定义估算器 : State Mean Estimator

以列为字典的 Pandas 数据透视表

python - 嵌套字典到 MultiIndex pandas DataFrame(3 级)

python - 为什么 *args 和 **kwargs 似乎在类装饰器中消失了?