Pandas中rank方法中的ValueError没有更多解释

时间:2017-01-12 10:24:42

标签: python pandas

我有一个像这样的pandas Dataframe:

     year   week           city  avg_rank
0    2016     52          Paris         1
1    2016     52 Gif-sur-Yvette         2
2    2016     52          Paris         1
3    2017      1          Paris         4
4    2016     52          Paris         3
5    2016     52          Paris         5
6    2016     52          Paris         2

但是这段代码:

df['real_index']=df.groupby(by=['year', 'week', 'city']).avg_rank.rank(method='first')

生成堆栈跟踪:

/usr/local/lib/python2.7/dist-packages/pandas/core/groupby.pyc in rank(self, axis, method, numeric_only, na_option, ascending, pct)

/usr/local/lib/python2.7/dist-packages/pandas/core/groupby.pyc in wrapper(*args, **kwargs)
590                                                                 *args, **kwargs)
591                         except(AttributeError):
592                             raise ValueError
593
594             return wrapper

ValueError:

我的DataFrame的那些列中没有NaN值。

我正在使用python2.7以及pandas 0.18.1numpy 1.11.0

我的DataFrame的形状由大约9.000.000行和15列组成。

更有趣的是,当我在DataFrame的所有子集中执行此代码行时(对于1.000.000行的每个子集),我不会提出任何ValueError

这是一种已知的行为pandas无法管理相当大的DataFrame,还是我错过了什么?

欢迎任何帮助!

2 个答案:

答案 0 :(得分:7)

由于我的DataFrame来自多个文件,我注意到有些索引是重复的。

使用

df.index = np.arange(df.shape[0])

加载数据后,它现在可以正常工作。

实际上,我的假设是,在群组中的某些群组中,有时行的索引相同。

当我尝试使用我的DataFrame的子集时,幸运的是,这个案例从未发生过。

但是,错误信息并非详尽无遗。

答案 1 :(得分:0)

可能数据太大而无法加载到内存中,因此将其分解为多个较小的文件是有道理的。你能说出数据集的大小吗?数据来自哪里,csv文件还是数据库?也许你应该看看火焰:https://github.com/blaze/blaze