gpt4 book ai didi

python - groupby pandas 期间的异常

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:24 25 4
gpt4 key购买 nike

我刚刚开始使用 Python For Data Analysis 学习使用 python 进行网络分析书,我对做一些 groupby 时遇到的异常感到困惑...这是我的情况。

我有一个已导入到 pandas 的 NetFlow 数据的 CSV。数据看起来像这样:

dt, srcIP, srcPort, dstIP, dstPort, bytes
2013-06-06 00:00:01.123, 123.123.1.1, 12345, 234.234.1.1, 80, 75

我已按如下方式导入和索引数据:

df = pd.read_csv('mycsv.csv')
df.index = pd.to_datetime(full_set.pop('dt'))

我想要的是每个时间段访问我的服务器的唯一 srcIPs 的计数(我有几天的数据,我想要按日期、小时的时间段)。我可以通过如下分组和绘制来获得整体流量图:

df.groupby([lambda t: t.date(), lambda t: t.hour]).srcIP.nunique().plot()

但是,我想知道总流量是如何在我的服务器之间分配的。我的直觉是另外按“dstIP”列(只有 5 个唯一值)进行分组,但是当我尝试在 srcIP 上聚合时出现错误。

grouped = df.groupby([lambda t: t.date(), lambda t: t.hour, 'dstIP'])
grouped.sip.nunique()
...
Exception: Reindexing only valid with uniquely valued Index objects

因此,我的具体问题是:如何避免此异常以创建一个图表,其中流量在 1 小时内聚合并且每个服务器都有不同的系列。

更一般地说,请让我知道我犯了哪些新错误。此外,数据没有常规频率时间戳,我不想要采样数据,以防对您的答案产生任何影响。

编辑 1这是我的 ipython session ,与输入完全一样。除了错误中最深的几个调用外,输出被省略。

编辑 2将 pandas 从 0.8.0 升级到 0.12.0 会产生如下所示的更具描述性的异常

import numpy as np
import pandas as pd
import time
import datetime

full_set = pd.read_csv('june.csv', parse_dates=True, index_col=0)
full_set.sort_index(inplace=True)
gp = full_set.groupby(lambda t: (t.date(), t.hour, full_set['dip'][t]))
gp['sip'].nunique()
...
/usr/local/lib/python2.7/dist-packages/pandas/core/groupby.pyc in _make_labels(self)
1239 raise Exception('Should not call this method grouping by level')
1240 else:
-> 1241 labs, uniques = algos.factorize(self.grouper, sort=self.sort)
1242 uniques = Index(uniques, name=self.name)
1243 self._labels = labs

/usr/local/lib/python2.7/dist-packages/pandas/core/algorithms.pyc in factorize(values, sort, order, na_sentinel)
123 table = hash_klass(len(vals))
124 uniques = vec_klass()
--> 125 labels = table.get_labels(vals, uniques, 0, na_sentinel)
126
127 labels = com._ensure_platform_int(labels)

/usr/local/lib/python2.7/dist-packages/pandas/hashtable.so in pandas.hashtable.PyObjectHashTable.get_labels (pandas/hashtable.c:12229)()

/usr/local/lib/python2.7/dist-packages/pandas/core/generic.pyc in __hash__(self)
52 def __hash__(self):
53 raise TypeError('{0!r} objects are mutable, thus they cannot be'
---> 54 ' hashed'.format(self.__class__.__name__))
55
56 def __unicode__(self):

TypeError: 'TimeSeries' objects are mutable, thus they cannot be hashed

最佳答案

所以我不是 100% 确定为什么会引发该异常..但有一些建议:

您可以使用 read_csv 一次性读入数据并解析日期时间和索引:

df = pd.read_csv('mycsv.csv', parse_dates=True, index_col=0)

然后您可以使用返回值元组的 lambda 函数来组成您的组:

gp = df.groupby( lambda t: ( t.date(), t.hour, df['dstIP'][t] ) )

此 lambda 函数的输入是索引,我们可以使用此索引进入外部作用域中的数据框并检索该索引处的 srcIP 值,从而将其纳入分组。

现在我们有了分组,我们可以应用聚合器了:

gp['srcIP'].nunique()

关于python - groupby pandas 期间的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18841530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com