パッケージ 'savReaderWriter'のSavLoaderを使用してSAV-dataset(SPSS-dataset)をロードしました。生データはパンダのデータフレームとしてロードされ、メタ情報(変数ラベル、値ラベル、フォーマットなど)はmeta_dictという辞書としてロードされます。 SavWriterでロードされたデータセット/パンダのデータフレームを保存すると、完璧に動作します:SPSSIOError: 'variable'の形式が誤って指定されました(A'XXX)
array = dataframe.where(dataframe.notnull(), None).values
with sav.SavWriter(path, var_names, var_types, **meta_kwargs) as writer:
writer.writerows(array)
しかし、私はそれをデータフレーム内の変数の一つの弦を切っても同じ長さにmeta_dictでフォーマットを調整する場合これ以上は動作しません:
は、変数の文字列をカット:
meta_dictに変数のフォーマットを調整dataframe[var] = dataframe[var].apply(lambda x: unicode(x)[:250])
:
meta_dict["formats"][var] = "A" + str(250)
これらの操作はどちらも機能します。しかし、SavWriterを使って調整したdataframeとmeta_dictを保存することはもうできません! 私は次のエラーを取得する:
私のコードに誤りだSPSSIOError: format for 'var' misspecified ('A250')
?
なぜ 'データフレーム[VAR] = .applyデータフレーム[VAR](ラムダX:ユニコード(X)[:データフレーム[var] = .apply(lambda x:str(x)[:250]) '? – Abdou
私はPython 2.7を使用しています。また、文字列にä、ü、öなどの記号もあります。私がユニコードを使用しない場合、私はascii/unicodeエラーを受け取ります。 – John
「A250」は正しいフォーマットではないかもしれません。私はちょうど[savutilソースコード](https://github.com/angloc/savutil/blob/master/savdllwrapper.py)を見て、文字列のフォーマットとして "SPSS_FMT_A"がリストされています。代わりに 'meta_dict [" formats "] [var] =" SPSS_FMT_A "'を試してみてください。 – Abdou