【问题标题】:pandas: remove rows with missing data熊猫:删除缺少数据的行
【发布时间】:2018-08-22 13:35:05
【问题描述】:

我正在使用以下代码删除 pandas 中缺少数据的一些行:

df = df.replace(r'^\s+$', np.nan, regex=True)
df = df.replace(r'^\t+$', np.nan, regex=True)
df = df.dropna()

但是,我仍然有一些数据框中的单元格看起来是空白/空的。为什么会这样?有什么办法可以摆脱这种空/空白单元格的行吗?谢谢!

【问题讨论】:

  • 您能否向我们展示数据框的样本,以便我们重现问题
  • df = df.replace('', np.nan) 呢?
  • 就像@jezrael 所说,尝试在您的代码中在dropna 之前添加df = df.replace('', np.nan, regex=True)
  • @jezrael:添加 df = df.replace('', np.nan) 有效。谢谢!

标签: python-3.x pandas


【解决方案1】:

你可以使用:

df = df.replace('', np.nan)

如果想要简化您的代码,可以通过| 加入正则表达式,对于空白空间使用^$

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

df = df.replace(r'^\s+$|^\t+$|^$', np.nan, regex=True)
print (df)
   A    B    C    D  E  F
0  a  NaN  NaN  1.0  5  a
1  b  5.0  NaN  3.0  3  a
2  c  4.0  NaN  5.0  6  a
3  d  5.0  4.0  7.0  9  b
4  e  5.0  2.0  NaN  2  b
5  f  4.0  3.0  0.0  4  b

【讨论】:

    【解决方案2】:

    根据您的 pandas 版本,您可以这样做:

    DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) 轴 : {0 or ‘index’, 1 or ‘columns’}, default 0

    确定是否删除了包含缺失值的行或列。

    0 或“索引”:删除包含缺失值的行。 1,或“列”:删除包含缺失值的列。

    Deprecated since version 0.23.0:: Pass tuple or list to drop on multiple
    

    轴。 source

    所以,现在删除空值的行

    df = df.dropna(axis=0)
    

    应该有效

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2013-04-30
      • 2012-11-04
      • 1970-01-01
      相关资源
      最近更新 更多