我正在处理一个缺少值的数据集。数据集的头部如下所示:
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
最佳答案
您可以使用 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
关于python - 数据框缺失值显示在每行的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53323259/