为什么Pandas Round方法会爆炸我的数据框?

时间:2018-07-08 04:51:15

标签: python-2.7 pandas numpy rounding

我尝试四舍五入此dataframe中的所有值。但是,大熊猫round() method使我的数据帧爆炸了5倍!从150行到7518行。

数据帧中的数据可能有些奇怪,但话又说回来,人们不会期望使用简单的舍入函数来做到这一点。

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

这将导致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) 

使用我的保管箱文件夹中的数据,舍入功能将产生多达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')

但是,这并不理想,因为熊猫的圆形方法会以神秘的方式起作用,并可能影响未来的程序。

1 个答案:

答案 0 :(得分:1)

我认为这是错误-round具有重复的CategoricalIndex,因此创建了pandas issue 21809pandas issue 21810

类似的解决方案是:

print (dfb.reset_index().round(3).set_index('tricile'))

或删除CategoricalIndex

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