2016-05-11 17 views
2

私の目的は、utf-8エンコーディングでcsvファイルとしてpandasデータフレームを保存することです。値は長いリスト(long> 100 entries)です。私は、これらのリストの出力が100エントリに制限されていることに気付いた後、...が続きます。 .to_csv()encoding='utf-8'を設定すると、この問題が発生します:pandasはutf-8エンコーディングでcsvとして保存すると最初の100エントリのみを保存します

>>> import pandas as pd 
>>> 
>>> d = {"row": {'column': range(1, 150)}} 
>>> df_out = pd.DataFrame(d) 
>>> df_out.to_csv("wo_encoding.csv") 
>>> df_out.to_csv("w_encoding.csv", encoding='utf-8') 
>>> 
>>> df_in1 = pd.read_csv("wo_encoding.csv") 
>>> len(eval(df_in1.iat[0,1])) # eval() to create list from string 
149 
>>> df_in2 = pd.read_csv("w_encoding.csv") 
>>> print(df_in2.iat[0,1][-13:]) # last 13 characters 
99, 100, ...] 

これはなぜでしょうか?これをバグと見なしますか? (エンコーディングを設定したままで)どうすれば回避できますか?

+0

ファイルを保存するとき、またはインタプリタの中にファイルを表示すると言っていますか? –

+0

これはファイル内にもあります。このコードは、エンコーディングのために何か起こっていることを示すためのものです。 – MERose

+0

これはpython2ですか? –

答えて

1

あなたは正しいです、それは異なったエンコーディングで異なったリストを扱うようです。 UTF-8では、リストは項目#100で切り捨てられます。

これを解決するには、CSVにエクスポートする前にリスト列を手動で文字列にマップするだけです。あなたの例では、これは意味します:

df_out['row'] = map(unicode, df_out['row']) 

私はあなたがUnicodeデータを使用して作業していると仮定しますが、後者は、あなたが与えた例では同様に動作するので、私が代わりにstrunicode機能にマッピングされました。

関連する問題