首页 > 解决方案 > 选择性 Pandas dropna 使 DataFrame 的长度不同

问题描述

我正在尝试删除nanDataFrame 中的值df,但是在不影响整行的情况下,我很难删除每一列的值。我的一个例子df可以在下面看到。

Advertising No Advertising
nan          7.0
71.0         nan
65.0         nan
14.0         nan
76.0         nan
nan          36.0
nan          9.0
73.0         nan
85.0         nan
17.0         nan
nan          103.0

我想要的输出如下所示。

Advertising No Advertising
71.0        7.0
65.0        36.0 
14.0        9.0
76.0        103.0 
73.0         
85.0                     
17.0                       

给出的示例只是整个 DataFrame 的一个片段。

任何帮助将不胜感激。

标签: pythonpandasdataframe

解决方案


使用justifyDataFrame.dropna:_

df = pd.DataFrame(justify(df.values, invalid_val=np.nan, axis=0, side='up'), 
                  index=df.index, 
                  columns=df.columns).dropna(how='all')
print (df)
    Advertising  No Advertising
0          71.0             7.0
1          65.0            36.0
2          14.0             9.0
3          76.0           103.0
4          73.0             NaN
5          85.0             NaN
6          17.0             NaN

另一个较慢的解决方案是使用DataFrame.applywith Series.dropna

df = df.apply(lambda x: pd.Series(x.dropna().values))
print (df)

   Advertising  No Advertising
0         71.0             7.0
1         65.0            36.0
2         14.0             9.0
3         76.0           103.0
4         73.0             NaN
5         85.0             NaN
6         17.0             NaN

将数字与字符串(空字符串)混合不是一个好主意,因为如果需要处理数字以后的熊猫函数失败,所以不要这样做。

但是可以通过:

df = df.fillna('')

推荐阅读