Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫群居期间的例外情况_Python_Python 2.7_Group By_Pandas_Time Series - Fatal编程技术网

Python 熊猫群居期间的例外情况

Python 熊猫群居期间的例外情况,python,python-2.7,group-by,pandas,time-series,Python,Python 2.7,Group By,Pandas,Time Series,我刚刚开始学习使用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('m

我刚刚开始学习使用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'))
df.groupby([lambda t: t.date(), lambda t: t.hour]).srcIP.nunique().plot()
f = lambda i: i.strftime('%Y-%m-%d %H:00:00')
full_set['hours'] = full_set.index.map(f)
我想要的是每个时间段访问我的服务器的唯一srcip的数量(我有几天的数据,我希望按日期、小时划分时间段)。我可以通过以下方式分组和绘制,获得总体交通图:

df = pd.read_csv('mycsv.csv')
df.index = pd.to_datetime(full_set.pop('dt'))
df.groupby([lambda t: t.date(), lambda t: t.hour]).srcIP.nunique().plot()
f = lambda i: i.strftime('%Y-%m-%d %H:00:00')
full_set['hours'] = full_set.index.map(f)
然而,我想知道总体流量是如何在我的服务器之间分配的。我的直觉是通过'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会话,完全作为输入。除了错误中最深的几个调用外,输出未写入

编辑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

所以我不能百分之百确定为什么会提出这个例外。。但有几点建议:

您可以使用
read\u 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()

我最终解决了问题,在原始数据框中添加了一列新的小时截断日期时间,如下所示:

df = pd.read_csv('mycsv.csv')
df.index = pd.to_datetime(full_set.pop('dt'))
df.groupby([lambda t: t.date(), lambda t: t.hour]).srcIP.nunique().plot()
f = lambda i: i.strftime('%Y-%m-%d %H:00:00')
full_set['hours'] = full_set.index.map(f)
然后,我可以
groupby('dip')
并在每个destIP中循环,创建一个每小时一次的分组图

for d, g in dipgroup:
    g.groupby('hours').sip.nunique().plot()

奇怪的是,我现在在尝试聚合时得到了一个
TypeError:unhabable type
。当试图显示
gp.groups
时,它也会引发相同的错误,我认为在原始group命令成功后不应该发生这种错误。您可以发布您执行和输入的确切代码吗?考虑到你在原始帖子中显示的准确输入,我发布的内容起了作用,我不确定打字错误可能来自何处