我有一个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
答案 0 :(得分:2)
我不确定它是否是一个错误或预期的行为,但问题是你是使用混合dtypes(object和float64)一次分配多个列,因此它们会被提升'常见的dtype,即对象dtype。
解决方法是在单独的列上执行ffill
。在您的示例中,这将是:
bla[('parameters', 'scanFrequency')] = bla[('parameters', 'scanFrequency')].ffill()
这将保留列的原始float64 dtype。