私はまばらであるとメモリ効率のために、私は場合でも、新しい表現がdtype=float64
で終わると思われるしかしto_sparse()
df.to_sparseのDTYPE()結果の定義
を使用して、それを変換したいデータフレームdf
を持っています私のdf
はdtype=int8
です。
to_sparse()
を使用すると、データタイプを指定する方法はありますか/自動変換が無効になるのはdtype=float64
ですか?
私はまばらであるとメモリ効率のために、私は場合でも、新しい表現がdtype=float64
で終わると思われるしかしto_sparse()
df.to_sparseのDTYPE()結果の定義
を使用して、それを変換したいデータフレームdf
を持っています私のdf
はdtype=int8
です。
to_sparse()
を使用すると、データタイプを指定する方法はありますか/自動変換が無効になるのはdtype=float64
ですか?
dtypesはpandasによって制御されるエンティティではありません。 Dタイプは、通常、数値が小さいものです。 Dタイプは決して制御できません。が自動的にアサートされます。はnumpyによって変更され、データフレームまたはnumpy配列内のデータを変更する場合にのみ変更できます。
つまり、dtypeとしてintではなくfloatで終わる典型的な理由は、系列またはnumpy配列にNaN値が導入されているためです。これはパンダだと言う人もいます。私は個人的には、パンダとナンピーの間の(あまりにも)密接なカップリングによるものだと主張するだろう。
通常、dtypesは何にも信頼されるべきではありません。信用できない信頼性があります。私はnumpy/pandasで働いている人は誰もdtypesに全く晒されなかったらより良い生活を送るだろうと思う。
あなたが実際に浮動小数点を嫌うならば、私が知る限り他の唯一の選択肢は、文字列表現を使用することです。もちろん、ほとんどの場合、さらに多くの問題が発生します。
Pandas
スパースフレームの実装がpandas.sparse.frame
であることを確認すると、astype()
メソッドはまだリリース0.18.0として実装されていることがわかります。 Ref. Github
dtype
の変換は、pandas.core.frame
(Pandas DataFrame
)のように動作するはずです。パンダDataFrame
df
を考えると、我々はSparseDataFrame
に変換し、dtype
df.to_sparse().astype(dtype)
を指定することができATM、SparseDataFrame
はdtype
のための多くのサポートを持っていないが、それは、現在開発されています。この問題は、私がGithubを開いたことを参照してください。
素晴らしい説明をいただきありがとうございます。私は疑問を抱いていました: "dtypeとしてintの代わりにfloatで終わる典型的な理由は、' df.fillna(0).to_sparse()を使うとNaNの値がシリーズまたはnumpyの配列に導入されるからです。 fillvalue = 0) 'NaN値で終わることは避けてください。しかしこれは問題を解決しません。私はあなたの説明からその行を読むのを忘れましたか? – Segmented
numpyは自動的にdtype floatをdtype intに変更しません。これはNait値がないためです。明らかに.to_sparse()変換のある時点でNaN値があります。最後に '.astype(int)'を追加しようとすると、dtypesがintに変更されますが、これはパフォーマンスを上げる別のステップです。 – firelynx
説明していただきありがとうございます! – Segmented