熊猫组示例错误

时间:2013-01-13 14:37:13

标签: pandas

我试图从Wes McKinney关于熊猫的书中复制一个例子,代码就在这里(它假设所有名称数据文件都在名字文件夹下)

# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd

years = range(1880, 2011)
pieces = []
columns = ['name', 'sex', 'births']
for year in years: 
    path = 'names/yob%d.txt' % year
    frame = pd.read_csv(path, names=columns)
    frame['year'] = year
    pieces.append(frame)

names = pd.concat(pieces, ignore_index=True)
names

def get_tops(group):    
    return group.sort_index(by='births', ascending=False)[:1000]

grouped = names.groupby(['year','sex'])
grouped.apply(get_tops)

我正在使用Pandas 0.10和Python 2.7。我看到的错误是:

Traceback (most recent call last):
  File "names.py", line 21, in <module>
    grouped.apply(get_tops)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.10.0-py2.7-linux-i686.egg/pandas/core/groupby.py", line 321, in apply
    return self._python_apply_general(f)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.10.0-py2.7-linux-i686.egg/pandas/core/groupby.py", line 324, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, self.obj, self.axis)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.10.0-py2.7-linux-i686.egg/pandas/core/groupby.py", line 585, in apply
    values, mutated = splitter.fast_apply(f, group_keys)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.10.0-py2.7-linux-i686.egg/pandas/core/groupby.py", line 2127, in fast_apply
    results, mutated = lib.apply_frame_axis0(sdata, f, names, starts, ends)
  File "reduce.pyx", line 421, in pandas.lib.apply_frame_axis0 (pandas/lib.c:24934)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.10.0-py2.7-linux-i686.egg/pandas/core/frame.py", line 2028, in __setattr__
    self[name] = value
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.10.0-py2.7-linux-i686.egg/pandas/core/frame.py", line 2043, in __setitem__
    self._set_item(key, value)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.10.0-py2.7-linux-i686.egg/pandas/core/frame.py", line 2078, in _set_item
    value = self._sanitize_column(key, value)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.10.0-py2.7-linux-i686.egg/pandas/core/frame.py", line 2112, in _sanitize_column
    raise AssertionError('Length of values does not match '
AssertionError: Length of values does not match length of index

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我认为这是0.10中引入的错误,即issue #2605, “在GroupBy之后使用apply时出现AssertionError”。它已被修复。

您可以等待0.10.1版本,此版本不应该太长,或者您可以升级到开发版本(通过git或只需下载zip大师。)