当数据集具有“-”和“ None”单元格时,熊猫会填写缺失的数据

时间:2018-12-19 19:40:15

标签: python 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”上的新用户。解决丢失数据的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

sourceaddress中的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