首页 > 解决方案 > 数据框缺失值显示在每行的末尾

问题描述

我正在处理缺少值的数据集。数据集的头部如下所示:

1:0.2 2:0.7 3:-1.2 4:0.5
1:0.9 3:0.1 4:0.8
1:-0.1 2:0.1 4:1.0
2:0.6 3:-1.0

冒号前面的数字是特征的索引。正如人们在某些行中看到的那样,缺少某些功能。因此,当我使用以下代码导入数据时,

df = pandas.read_csv('dataset',header=None,sep = '\s+|:',engine='python')

我得到的数据框如下所示:

    0       1       2       3       4       5       6       7
0   1.0     0.2     2.0     0.7     3.0     -1.2    4.0     0.5
1   1.0     0.9     3.0     0.1     4.0     0.8     NaN     NaN
2   1.0     -0.1    2.0     0.1     4.0     1.0     NaN     NaN
3   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
0   1.0     0.2     2.0     0.7     3.0     -1.2    4.0     0.5
1   1.0     0.9     0.0     0.0     3.0     0.1     4.0     0.8
2   1.0     -0.1    2.0     0.1     0.0     0.0     4.0     1.0
3   0.0     0.0     2.0     0.6     3.0     -1.0    0.0     0.0

标签: pythonpandas

解决方案


您可以使用该csv模块来构建字典列表,然后将其提供给pd.DataFrame构造函数。最后,使用fillna来填充空值0

from io import StringIO
import csv
import pandas as pd

x = StringIO("""1:0.2 2:0.7 3:-1.2 4:0.5
1:0.9 3:0.1 4:0.8
1:-0.1 2:0.1 4:1.0
2:0.6 3:-1.0""")

# replace x with open('file.csv', 'r')
with x as fin:
    L = [dict(i.split(':') for i in line) for line in csv.reader(fin, delimiter=' ')]

df = pd.DataFrame(L, dtype=float).fillna(0)

print(df)

     1    2    3    4
0  0.2  0.7 -1.2  0.5
1  0.9  0.0  0.1  0.8
2 -0.1  0.1  0.0  1.0
3  0.0  0.6 -1.0  0.0

推荐阅读