python - 选择性 Pandas dropna 使 DataFrame 的长度不同
问题描述
我正在尝试删除nan
DataFrame 中的值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 的一个片段。
任何帮助将不胜感激。
解决方案
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.apply
with 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('')
推荐阅读
- vue.js - Vue 中包装内容的插槽
- inspec - 使用输入在 Inspec 中构建字符串
- python - 更新 matplotlib 图中的文本
- android - 没有从 jetpack compose 中的 rememberLauncherForActivityResult() 获取结果
- c++ - UPNP 检测网络中的设备?
- laravel - 如何使用控制器导入数据以在 Laravel 8 中查看。*
- java - Elasticsearch client.indices().putTemplate - 不推荐使用的方法
- java - 在 Spring boot 中查找传入请求的 Content-type
- jboss - JBOSS 6.3 访问日志自动删除
- kdb - 计数 t 与 kdb 选择语句中的实际数字