python - 删除所有行和标题为 na 的数据框列

标签 python pandas dataframe

我有一个包含许多 NoneType 值的数据框,我想删除所有行值和标题为 None 的所有列。我正在努力寻找一种方法来做到这一点。在 MWE 下面我设法要么删除所有行都为 None 的所有列,要么删除标题为 None 的所有列。

from __future__ import annotations

import pandas as pd

d = [[1, 2, None, None, None], [4, 5, None, None, 7]]
cols = ['a', 'b', 'c', None, None]
df = pd.DataFrame(data=d, columns=cols)

print("Original: \n", df)
#Original: 
#    a  b     c   NaN  NaN
#0  1  2  None  None  NaN
#1  4  5  None  None  7.0

print("\nDropped how = all: \n", df.dropna(axis=1, how="all"))    # Drops column 'c'
#Dropped how = all: 
#    a  b  NaN
#0  1  2  NaN
#1  4  5  7.0

print("\nDropped None columns: \n", df[df.columns.dropna()])
#Dropped None columns: 
#    a  b     c
#0  1  2  None
#1  4  5  None


我怎样才能只删除我想删除的列并得到这个?
#Wanted: 
#    a  b     c  NaN
#0  1  2  None   NaN
#1  4  5  None   7.0

最佳答案

您可以在 & 中使用 2 个条件并反转和使用 .loc[] :

df.loc[:,~(df.columns.isna() & df.isna().all())]
   a  b     c  NaN
0  1  2  None  NaN
1  4  5  None  7.0

关于python - 删除所有行和标题为 na 的数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59720107/

相关文章:

python - 在数据框中,如何将带有列表的列(所有行的长度相同)分解为同一行的不同列

pandas - 如何动态连接多个列,其中列名存储为分隔字符串 Pandas

python - 如何获取数据框中所有列的数据类型?

python - Pandas 计算行的增长百分比

rbind 列表并恢复名称

python - Pandas - 根据 A 列中的值访问 B 列中的值

python - 如果显示元素,则查找元素的选择器无效

python - 为什么用括号和逗号索引 numpy 数组的行为不同?

Python不覆盖文件

python - Tensorflow concat tf.data.Dataset 批处理