pandas:为什么在向数据框分配列时,列的dtype会改变?

5

我有一个名为 bla 的pandas DataFrame,其列使用MultiIndex进行标记:

ipdb> bla.dtypes
phases      end              datetime64[ns]
            name                     object
            start            datetime64[ns]
parameters  scanFrequency           float64
            tideFile                 object

现在我正在对该帧的一部分进行简单的插值,并将结果重新分配给它:
bla['parameters'] = bla['parameters'].ffill()

奇怪的是,我最终得到了一个数据框,其中 scanFrequency 的数据类型已经改变:

ipdb> bla.dtypes
phases      end              datetime64[ns]
            name                     object
            start            datetime64[ns]
parameters  scanFrequency            object
            tideFile                 object
dtype: object

为什么会发生这种情况?ffill 不改变类型:
ipdb> bla['parameters'].ffill().dtypes
scanFrequency    float64
tideFile          object
dtype: object
1个回答

2
我不确定这是一个错误还是预期行为,但问题在于您一次性分配了多个具有混合类型(对象和float64)的列,因此它们被“向上转换”为一种通用的类型,即对象类型。
解决方法是对单独的列执行ffill。在您的示例中,应该是这样的:
bla[('parameters', 'scanFrequency')] = bla[('parameters', 'scanFrequency')].ffill()

这将保留列的原始float64数据类型。

感谢。我已在 GitHub 上添加了一个问题,用于上转型。解决方法目前有效。 - languitar
1
将来参考,请查看此处问题:https://github.com/pydata/pandas/issues/13433 - joris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接