我尝试四舍五入此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')
但是,这并不理想,因为熊猫的圆形方法会以神秘的方式起作用,并可能影响未来的程序。
答案 0 :(得分:1)
我认为这是错误-round
具有重复的CategoricalIndex
,因此创建了pandas issue 21809和pandas issue 21810。
类似的解决方案是:
print (dfb.reset_index().round(3).set_index('tricile'))
或删除CategoricalIndex
:
dfb.index = dfb.index.astype(str)
print (dfb.round(3))