0

我正在尝试复制 Wes McKinney 关于 Pandas 的书中的一个示例,代码在这里(假设所有名称数据文件都在名称文件夹下)

# -*- 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

有任何想法吗?

4

1 回答 1

2

我认为这是 0.10 中引入的错误,即问题 #2605,“AssertionError when using apply after GroupBy”。它已经被修复了。

您可以等待 0.10.1 版本,从现在开始应该不会太久,或者您可以升级到开发版本(通过git或简单地通过下载zipmaster 。)

于 2013-01-13T14:53:02.963 回答