我有一个像这样的 Pandas 数据框:
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.1
和 numpy 1.11.0
。
我的 DataFrame 的形状由大约 9.000.000 行和 15 列组成。
更有趣的是,当我在我的 DataFrame 的所有子集中执行此代码行时(对于 1.000.000 行的每个子集),我没有引发任何 ValueError
。
这是 pandas
无法很好地管理相当大的 DataFrame 的已知行为,还是我遗漏了什么?
欢迎任何帮助!
最佳答案
由于我的 DataFrame 来自多个文件,我注意到一些索引是重复的。
与
df.index = np.arange(df.shape[0])
加载数据后,它现在可以工作了。
确实,我的假设是,在 groupby 的某些组中,有时会有具有相同索引的行。
当我尝试使用我的 DataFrame 的子集时,幸运的是/不幸的是,这种情况从未发生过。
但是,错误消息不是很详尽。
关于python - Pandas 排名方法中的 ValueError 没有更多解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41610667/