Python 2.7 为什么熊猫圆方法会爆炸我的数据帧?

Python 2.7 为什么熊猫圆方法会爆炸我的数据帧?,python-2.7,pandas,numpy,rounding,Python 2.7,Pandas,Numpy,Rounding,我试着把所有的值都放在这里面。然而,熊猫将我的数据帧爆炸了5倍!从150行到7518行 数据帧中的数据可能有点奇怪,但我们也不希望简单的舍入函数能做到这一点 下面,我使用1)模拟数据和2)导致上述错误的数据复制错误 这将产生150行,这是正确的数字: import pandas as pd import numpy as np df = pd.DataFrame(np.random.random([150, 4]), columns=['A', 'B', 'C', 'D']) df["cat"]

我试着把所有的值都放在这里面。然而,熊猫将我的数据帧爆炸了5倍!从150行到7518行

数据帧中的数据可能有点奇怪,但我们也不希望简单的舍入函数能做到这一点

下面,我使用1)模拟数据和2)导致上述错误的数据复制错误

这将产生150行,这是正确的数字:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random([150, 4]), columns=['A', 'B', 'C', 'D'])
df["cat"] = "MID"
df.loc[:399,["cat"]] = "LOW"
df.iloc[-400:,-1] = "HI"
df.cat.value_counts()
df.set_index("cat", inplace=True)
df.round(3) 
使用my dropbox文件夹中的数据,round函数生成的行数高达7518行:

dfb = pd.read_pickle('dfna.pkl')
dfb.round(3)
这很奇怪。我现在用这条相当难看的线解决了这个问题:

dfb = dfb.reset_index().round({'A': 3, 'B': 3, 'C': 3, 'D': 3}).set_index('tricile')

然而,这并不理想,因为pandas的round方法具有神秘的作用,可能会影响未来的程序。

我认为这是bug-
round
,使用重复的
CategoricalIndex
,因此创建并执行

类似于您的解决方案是:

print (dfb.reset_index().round(3).set_index('tricile'))
或删除分类索引:

dfb.index = dfb.index.astype(str)
print (dfb.round(3))

Git bug与我在jezrael回答后在Git上发布的bug是重复的。