pandas:为什么列的dtype会在赋值给数据框时发生变化

时间:2016-06-13 11:41:32

标签: python pandas

我有一个pandas DataFrame bla,其中列为MultiIndex:

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

现在我在该帧的一部分上执行一些简单的插值并将结果分配给它:

bla['parameters'] = bla['parameters'].ffill()

奇怪的是,我最终得到了scanFrequency的dtype发生变化的数据框:

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 个答案:

答案 0 :(得分:2)

我不确定它是否是一个错误或预期的行为,但问题是你是使用混合dtypes(object和float64)一次分配多个列,因此它们会被提升'常见的dtype,即对象dtype。

解决方法是在单独的列上执行ffill。在您的示例中,这将是:

bla[('parameters', 'scanFrequency')] = bla[('parameters', 'scanFrequency')].ffill()

这将保留列的原始float64 dtype。