python - 在数据框中缺少功能的地方将 Nan 替换为 0
问题描述
我正在处理缺少值的数据集。数据集的头部如下所示:
+1 1:0.2 2:0.7 3:-1.2 4:0.5
-1 1:0.9 3:0.1 4:0.8
-1 1:-0.1 2:0.1 4:1.0
+1 2:0.6 3:-1.0
第一列是数据的标签,冒号前面的数字是特征的索引。某些行缺少某些功能。因此,当我使用以下代码导入数据时,
df = pandas.read_csv('dataset',header=None,sep = '\s+|:',engine='python',dtype=float)
我得到一个数据框看起来像
0 1 2 3 4 5 6 7 8
0 1.0 1.0 0.2 2.0 0.7 3.0 -1.2 4.0 0.5
1 -1.0 1.0 0.9 3.0 0.1 4.0 0.8 NaN NaN
2 -1.0 1.0 -0.1 2.0 0.1 4.0 1.0 NaN NaN
3 1.0 2.0 0.6 3.0 -1.0 NaN NaN NaN NaN
我想在正确的位置用 0 替换 NaN。但如果我使用df.fillna(0)
,我将替换每行末尾的 NaN ,看起来像
0 1 2 3 4 5 6 7 8
0 1.0 1.0 0.2 2.0 0.7 3.0 -1.2 4.0 0.5
1 -1.0 1.0 0.9 3.0 0.1 4.0 0.8 0.0 0.0
2 -1.0 1.0 -0.1 2.0 0.1 4.0 1.0 0.0 0.0
3 1.0 2.0 0.6 3.0 -1.0 0.0 0.0 0.0 0.0
我真正想要的是一个看起来像这样的数据框,
0 1 2 3 4 5 6 7 8
0 1.0 1.0 0.2 2.0 0.7 3.0 -1.2 4.0 0.5
1 -1.0 1.0 0.9 0.0 0.0 3.0 0.1 4.0 0.8
2 -1.0 1.0 -0.1 2.0 0.1 0.0 0.0 4.0 1.0
3 1.0 0.0 0.0 2.0 0.6 3.0 -1.0 0.0 0.0
所以在我删除索引后我应该有
0 1 2 3 4
0 1.0 0.2 0.7 -1.2 0.5
1 -1.0 0.9 0.0 0.1 0.8
2 -1.0 -0.1 0.1 0.0 1.0
3 1.0 0.0 0.6 -1.0 0.0
解决方案
问题不在于填充 N/A 值,正如@BurningKarl 在评论中所建议的那样,问题在于尝试读取文件,而read_csv
该文件绝不是 csv 或类似 csv 的文件。您可能需要以不同的方式解析此文件。
如果它可以帮助您入门,我在下面发布了一个片段,该片段显示了如何根据您所说的需要将数据格式化以摄取到适当的数据帧中。如果您可以将文件解析file.readlines
为字典列表,则可以将其包装在 DataFrame 构造函数中。(注意,这个解析可能需要一些努力才能完全正确)
x=[{0:1,1:0.2, 2:0.7, 3:-1.2, 4:0.5},
{0:-1,1:0.9, 3:0.1, 4:0.8},
{0:-1,1:-0.1, 2:0.1, 4:1.0},
{0:1,2:0.6, 3:-1.0}]
pd.DataFrame(x)
给你
0 1 2 3 4
0 1 0.2 0.7 -1.2 0.5
1 -1 0.9 NaN 0.1 0.8
2 -1 -0.1 0.1 NaN 1.0
3 1 NaN 0.6 -1.0 NaN
然后你可以像之前尝试过的那样填充na(0)
推荐阅读
- node.js - gulp:如何检查文件是否已更改?
- plot - 使用 gnuplot 的带有条件的 xtics 标签
- spring-mvc - 为什么spring-boot应用程序不需要@EnableWebMvc
- java - ExoPlayer 创建的视频播放器不起作用
- android - android 应用程序中未收到 FCM 消息
- python - Python 和 crontab 中的客户端 SQL
- mysql - 使用 GROUP BY 时获取 desc 或最后插入的数据
- webservice-client - 如何将自签名 CA 证书安装到 Trust Store Red Hat Enterprise Linux Server 6.9 版
- android - 使用 ImageView 的 PagerAdapter OOM 错误
- c++ - 为什么指针在后增量运算符操作时表现不同?