首页 > 解决方案 > 如何修剪和重塑数据框?

问题描述

我的 df 看起来像这样:

a b  c d e f 
1 na 2 3 4 5
1 na 2 3 4 5
1 na 2 3 4 5
1 6 2 3 4 5

如何修剪和重塑数据框,以便为每一列删除 n/a 并且数据框如下所示:

编辑;

df.dropna()正在删除所有行。

a b  c d e f 
1 6 2 3 4 5

这个数据框有数百万行,我需要能够逐列删除 n/a 行,同时保留其中包含数据的行和列。

编辑;

df.dropna()正在删除列中的所有行。当我检查带有 n/a 的列是否为空时,df.column_name.empty()我得到了错误。所以列中有数据不适用

标签: python-3.xpandas

解决方案


对我来说,删除缺失值和sdropna工作得很好:None

df = df.dropna()
print (df)
   a    b  c  d  e  f
3  1  6.0  2  3  4  5

但是,如果可能有多个用于删除 create mask by 的值,使用和 last filter byisin进行链式测试缺失值-通过反转掩码每行返回至少一个:isnullanyTrue~

df = pd.DataFrame({'a': ['a', None, 's', 'd'],
                   'b': ['na',7, 2, 6], 
                   'c': [2, 2, 2, 2],
                   'd': [3, 3, 3, 3],
                   'e': [4, 4, np.nan, 4], 
                   'f': [5, 5, 5, 5]})

print (df)
      a   b  c  d    e  f
0     a  na  2  3  4.0  5
1  None   7  2  3  4.0  5
2     s   2  2  3  NaN  5
3     d   6  2  3  4.0  5

df1 = df.dropna()
print (df1)
   a   b  c  d    e  f
0  a  na  2  3  4.0  5
3  d   6  2  3  4.0  5

mask = (df.isin(['na', 'n/a']) | df.isnull()).any(axis=1)

df2 = df[~mask]
print (df2)
   a  b  c  d    e  f
3  d  6  2  3  4.0  5

推荐阅读