2017-11-09 10 views
1

私はパンダのデータフレームをStataファイルとして保存したいと考えていましたが、int64またはfloat64型標準のPythonタイプintfloatに変換されます。私はたくさんの検索をしてきましたが、解決策が見つからないため、私の問題に対する解決策は見つかりませんでした。float/int型の列をfloat/int型の列をpandas型のデータフレームに変換する

私のようなものを使用して試してみました:

import numpy as np 
def conversion(obj): 
    if isinstance(obj, np.generic): 
     return np.asscalar(obj) 

mergeddfnew["speech_main_wordspersentcount_wc"]=mergeddfnew["speech_main_wordspersentcount_wc"].apply(conversion) 

私もastypeを試してみました。列の型は常に同じです。

+0

あなたはStataのは、例えばファイルの例を与えることができますこれを示す数行。あるいは、標準的なPython型に変換する必要のある小さなDataFrameは、なぜint64/float64に問題がありますか? –

+0

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_stata.html私はここで、「列dtypeはStataで表現できません」ということです。だから私はそれがこれらのタイプ。しかし、エラーメッセージは 'speech_main_propcomplexwords_wostop_wc'です。これはfloat64にある列の名前に過ぎません。 – Julia

+0

明示的に変換しようとしてください。質問を改善してください。 –

答えて

1

IO section of the docsを参照してください:

Stataのデータファイルは、データ型のサポートが限られています。 244文字以下の文字列、int8、int16、int32、float32、およびfloat64は、.dtaファイルに格納できます。さらに、Stataは欠損データを表す特定の値を予約します。特定のデータ型に対して、Stataの許容範囲外にある欠損していない値をエクスポートすると、次の大きなサイズに変数が再入力されます。たとえば、int8の値はStataで-127〜100に制限されているため、100を超える値を持つ変数はint16への変換をトリガーします。浮動小数点データ型のn値は、基本的な欠落データ型(Stataの。)として格納されます。

はしかし、パンダは、これらの制限のいくつかを克服し、あなたのために変換するために最善しようとします:

Stataの作家優雅に鋳造することによりint64型、ブール値、UINT8、uint16の、UINT32など、他のデータ型を扱うデータを表すことができる最小のサポートされたタイプに変換します。たとえば、タイプがuint8のデータは、すべての値が100未満(Stataの欠落していないint8データの上限)の場合はint8にキャストされ、値がこの範囲外の場合は変数がキャストされますint16。

つまり、あなたの列はこれらの条件を満たしていないようです。

私はint32のようなDTAでサポートされている何か(それはint型だと仮定)に変換し、手動でしようとするだろう:

df["speech_main_wordspersentcount_wc"].astype(np.int32) 
df["speech_main_wordspersentcount_wc"] = df["speech_main_wordspersentcount_wc"].astype(np.int32) 
+0

これは失敗しますが、より多くの指示エラーメッセージ(特定の番号が範囲外です)が返ってくると思います。 –

+0

このドキュメントは、1つの重要な詳細については古くなっています。 Stata 13(2013)では、最大244文字の文字列変数に対する制限が削除されました。 'strL'変数は、各観測で最大20億バイトを含むことができます。 –

+0

@NickCoxはドキュメントのみであるか、to_strataはその場合ValueErrorを引き上げますか? –

関連する問題