2016-06-13 12 views
3

への割り当ての列の変更のDTYPEが、私は列のためのマルチインデックスとパンダのデータフレームblaを持っているん:パンダ:なぜ、データフレーム

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

今、私はそれの一部にいくつかの簡単な補間を行っておりますそれに戻って、結果をフレームに割り当てる:

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

を不思議、Iは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 

答えて

2

私はそれがバグか期待される動作であるかどうかわからないけど、問題は、あなたが混在dtypes(オブジェクトとのfloat64)で一度に複数の列を割り当てることで、このため、彼らは共通のdtype、つまりオブジェクトdtypeに「アップキャスト」されています。

回避方法は、別の列にffillを実行することです。あなたの例では、これは次のようになります。

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

これは、列の元のfloat64のDTYPEが保持されます。

+0

ありがとうございました。私はアップキャスティングのためにギターに問題を追加しました。これまでの回避策が機能します。 – languitar

+1

今後の参考として、問題は次のとおりです:https://github.com/pydata/pandas/issues/13433 – joris

関連する問題