2017-07-06 17 views
5

整数の列をシフトすると、PandasがNaNの存在により浮動小数点数に自動的に変換するときの列の修正方法が分かります。シフトは、これによりフロートへのすべての整数変換はNaNを導入した場合 I basically use the method described here.Pandas Shiftは浮動小数点数を浮動小数点に変換して丸めます

しかし、そうであっても、それはもともとあったものを複製していないバック整数にそれを作り直す(エポックタイムスタンプに、例えば)が起こるいくつかの丸めがあります。

これを修正する方法はありますか?

例データ:

pd.DataFrame({'epochee':[1495571400259317500,1495571400260585120,1495571400260757200, 1495571400260866800]}) 
Out[19]: 
       epoch 
0 1495571790919317503 
1 1495999999999999999 
2 1495571400265555555 
3 1495571400267777777 

コード例:

df['prior_epochee'] = df['epochee'].shift(1) 
df.dropna(axis=0, how='any', inplace=True) 
df['prior_epochee'] = df['prior_epochee'].astype(int) 

結果の出力:

Out[22]: 
       epoch   prior_epoch 
1 1444444444444444444 1400000000000000000 
2 1433333333333333333 1490000000000000000 
3 1777777777777777777 1499999999999999948 
+0

を自分でシフトすることができ、あなたはとにかくnp.nan行を望んでいないことを知っていますか? –

+0

@Cedric更新された質問を見る – guy

答えて

1

あなたが原因np.nanとにfloatとしてキャストされたときにint何が起こるかを知っているのであなたはあなたがこの問題が発生した例のデータを提供することができますnumpy

df[1:].assign(prior_epoch=df.epoch.values[:-1]) 

       epoch   prior_epoch 
1 1495571400260585120 1495571400259317500 
2 1495571400260757200 1495571400260585120 
3 1495571400260866800 1495571400260757200 
関連する問題