【问题标题】:Can't drop null values in Python不能在 Python 中删除空值
【发布时间】:2019-04-25 23:59:24
【问题描述】:

我得到这个数据集,当值为空时,它有符号-

起初我认为这不是问题,所以我删除了这些行:

df_c = df[df != '-']

但它实际上并没有删除行,而是用 NaN 代替 -

然后我做了:

df_c = df_c[df_c.notnull()]

但它不起作用,它又给了我-。 我做错了什么?

【问题讨论】:

  • 您可以在标签中添加语言吗?蟒蛇?
  • 对不起,我完全忘记了,是的,它是 Python
  • 试试del df[df != '-']或者,你能举个df数据结构的例子吗?
  • 在第二次操作中,您使用的是df 而不是df_c。使用df_c.dropna()
  • @Sociopath 我知道,但即使做 df_c 它也不起作用

标签: python python-3.x nan missing-data


【解决方案1】:

mask + dropna

您可以使用布尔数据框进行屏蔽,然后使用dropna

df = pd.DataFrame({'A': [1, '-', '-', 4, '-'],
                   'B': ['A', 'B', '-', 'C', '-'],
                   'C': [0.5, '-', '-', 1.5, 2.5]})

df = df.mask(df == '-').dropna()

print(df)

   A  B    C
0  1  A  0.5
3  4  C  1.5

默认情况下,dropna 删除行 (axis=0),其中 any 值为空 (how='any')。您可以根据需要修改这些参数。

注意:这在功能上与df = df[df != '-'].dropna() 相同。不过,从外观的角度来看,mask意图可能看起来更清晰。


您的解决方案的问题是 df_c.notnull() 提供了一个布尔 dataframe 数组,但您想通过一维数组/系列进行索引。您可以使用:

df_c = df[df != '-']
df_c = df_c[df_c.notnull().all(1)]

但这很冗长,可能效率低下。

【讨论】:

  • 谢谢,现在可以了。但我做错了什么?因为即使df.dropna() 也不起作用。
  • @Zhang_anlan,我已经更新了你在最初尝试时做错了什么。我无法复制“dropna 不起作用”。
猜你喜欢
  • 1970-01-01
  • 2023-02-01
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多