首页 > 解决方案 > 当数据集有“-”和“无”单元格时,Pandas 填充缺失的数据

问题描述

我正在使用一个数据集,该数据集的 sourceusername 列中包含“-”,而该数据框的 sourcehostname 列中包含“None”。台式机的 IP 通常保持不变,但笔记本电脑的 IP 会发生变化。我正在尝试使用我所拥有的信息来填补空白。此数据框包含用户将注销的计算机,新用户将登录并创建代理流量。这是数据框的样子:

 df
    sourceusername  sourcehostname  sourceaddress   destinationhostname
 0  1111            Computer_1      10.11.2.22      khms0.google.com
 1  1111            Computer_1      10.11.2.22      photos.wavebid.com
 2  1112            Computer_2      10.11.2.23      www.msn.com
 3  1113            Computer_3      10.11.2.24      log.pinterest.com
 4  1113            Computer_3      10.11.2.24      apx.moatads.com
 5  -               None            10.11.2.23      pixabay.com
 6  -               Computer_3      10.11.2.24      rb.adnxs.com
 7  1111            None            10.11.2.22      dt.adsafeprotected.com
 8  1111            Computer_1      10.11.2.22      ad.doubleclick.net
 9  -               None            10.11.2.23      s0.2mdn.net
10  1114            Computer_1      10.11.2.22      khms2.google.com
11  -               None            10.11.2.22      photos.wavebid.com
12  1113            Computer_3      10.11.2.24      log.pinterest.com

期望的输出:

 df
    sourceusername  sourcehostname  sourceaddress   destinationhostname
 0  1111            Computer_1      10.11.2.22      khms0.google.com
 1  1111            Computer_1      10.11.2.22      photos.wavebid.com
 2  1112            Computer_2      10.11.2.23      www.msn.com
 3  1113            Computer_3      10.11.2.24      log.pinterest.com
 4  1113            Computer_3      10.11.2.24      apx.moatads.com
 5  1112            Computer_2      10.11.2.23      pixabay.com
 6  1113            Computer_3      10.11.2.24      rb.adnxs.com
 7  1111            Computer_1      10.11.2.22      dt.adsafeprotected.com
 8  1111            Computer_1      10.11.2.22      ad.doubleclick.net
 9  1112            Computer_2      10.11.2.23      s0.2mdn.net
10  1114            Computer_1      10.11.2.22      khms2.google.com
11  1114            Computer_1      10.11.2.22      photos.wavebid.com
12  1113            Computer_3      10.11.2.24      log.pinterest.com

如您所见,索引 10 处的用户“1114”是“Computer_1”上的新用户。解决填充缺失数据的最佳方法是什么?

标签: pythonpandas

解决方案


以下给出了已发布的所需输出:

附加sourceaddress到索引,因为行号就像评论中讨论的时间序列

df = df.set_index('sourceaddress', append=True)

交换Index级别,然后对MultiLevel索引进行排序,以有效显示按每个 IP 地址分组的事件的“时间”顺序

df = df.swaplevel().sort_index()

现在df使用 2 级 MultiIndex 如下所示:

                 sourceusername sourcehostname     destinationhostname
sourceaddress                                                         
10.11.2.22    0            1111     Computer_1        khms0.google.com
              1            1111     Computer_1      photos.wavebid.com
              7            1111           None  dt.adsafeprotected.com
              8            1111     Computer_1      ad.doubleclick.net
              10           1114     Computer_1        khms2.google.com
              11              -           None      photos.wavebid.com
10.11.2.23    2            1112     Computer_2             www.msn.com
              5               -           None             pixabay.com
              9               -           None             s0.2mdn.net
10.11.2.24    3            1113     Computer_3       log.pinterest.com
              4            1113     Computer_3         apx.moatads.com
              6               -     Computer_3            rb.adnxs.com
              12           1113     Computer_3       log.pinterest.com

将 '-' 和 'None' 替换为np.nan并使用 nan 值的前向填充来有效填充我们按 IP 地址分组的伪时间序列

df = df.replace('-', np.nan).replace('None', np.nan).ffill()

sourceaddressfrom移动Index到数据中以获得我们开始使用的格式:

df = df.reset_index(level='sourceaddress').sort_index()

重新排序列

df = df.reindex(columns=['sourceusername', 'sourcehostname', 'sourceaddress', 'destinationhostname'])

结果如下:

   sourceusername sourcehostname sourceaddress     destinationhostname
0            1111     Computer_1    10.11.2.22        khms0.google.com
1            1111     Computer_1    10.11.2.22      photos.wavebid.com
2            1112     Computer_2    10.11.2.23             www.msn.com
3            1113     Computer_3    10.11.2.24       log.pinterest.com
4            1113     Computer_3    10.11.2.24         apx.moatads.com
5            1112     Computer_2    10.11.2.23             pixabay.com
6            1113     Computer_3    10.11.2.24            rb.adnxs.com
7            1111     Computer_1    10.11.2.22  dt.adsafeprotected.com
8            1111     Computer_1    10.11.2.22      ad.doubleclick.net
9            1112     Computer_2    10.11.2.23             s0.2mdn.net
10           1114     Computer_1    10.11.2.22        khms2.google.com
11           1114     Computer_1    10.11.2.22      photos.wavebid.com
12           1113     Computer_3    10.11.2.24       log.pinterest.com

推荐阅读