python - 数据框缺失值显示在每行的末尾

标签 python pandas

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

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/

相关文章:

python - 〜./zshrc : command not found: $

python - 通过 Needleman Wunsch 表进行回溯

python - 有条件地将 pandas 数据框中的值替换为计算值

python - 根据其他数据帧中的列标题成员资格(按日期)在 pandas 数据帧(按日期)中设置 boolean 值

python - 在 EC2 上运行大数据计算时出现 dask.async.MemoryError

python - 使用Python提取医疗信息

python - 在 Python 中将 unicode 代码点转换为 unicode 字符

python - scikit-learn 分割数据集中的随机状态

python - Pandas:将季度数据转换为月度数据

python - 如何正确使用 groupby 和 grouper 逐月累加列 'A' 和平均列 'B'