2016-08-30 5 views
0

私はpandasを使用してexcelで作成したcsvファイルを読み込み、分析して結果をcsvファイルに保存しています。私はパンダto_csvとfrom_csvメソッドは\ rのような特殊文字を扱うことができないようだが、いずれのエラーも発生しないことに気づいた。私はここに任意のエンコーディングを指定していないよのでcsvファイルの書き込みと読み込み時に特殊文字( r)の問題

In [7]: import pandas as pd 

In [8]: data = {    
'A': ['one', 'two', 'three'], 
'B': ['four', 'five', 'six'] 
} 

In [9]: df = pd.DataFrame(data) 

In [10]: df 
Out[10]: 
     A  B 
0 one four 
1 two five 
2 three six 

In [11]: df.loc[1,'A'] = 't' + '\r' + 'o' 

In [12]: df 
Out[12]: 
     A  B 
0 one four 
1 t\ro five 
2 three six 

In [13]: df.to_csv("my_df.csv") 

In [14]: df2 = pd.DataFrame.from_csv("my_df.csv") 

In [15]: df2 
Out[15]: 
     A  B 
0 one four 
1  t NaN 
o five NaN 
2 three six 

私はそれがASCIIを使用しているが、私はエンコーディングを指定する際にも=「UTF-8」書き込みや読み出しのためには、私は同じ結果を得ると仮定しています。

行/列が壊れていないか、他の予期しないことが起こるように、堅牢なcsv書き込みスクリプトと読み取りスクリプトを作成するにはどうすればよいですか?唯一の解決策がcsvに書き込む前にすべての文字列をチェックして 'きれいにする'ことであれば、それを行う最も簡単な方法は何ですか?

+0

CSVはかなりワイルドなフォーマットであります多くの方言でRFC 4180はそれを定義しようとします。そこ。キャリッジリターン( '\ r')は、TEXTDATAブロック内では許可されません。これはライン(レコード)区切り文字の一部です。 –

答えて

1

誰かがより良い提案をしていない限り、私はPandasをロードする前にすべてのcsvファイルを前処理することによって、特定の問題を以下のように扱っています。それは私の現在のシステム上で動作するようですが、それは愚かな証拠ではないと確信しています。

In [30]: f = open("my_df.csv") 

In [31]: content = f.read().replace('\r',' ') 

In [32]: with open("my_df2.csv", "w") as g: 
    ....:  g.write(content) 
    ....:  

In [33]: df2 = pd.DataFrame.from_csv("my_df2.csv") 

In [34]: df2 
Out[34]: 
     A  B 
0 one four 
1 t o five 
2 three six 
+0

前処理後にファイルに書き戻す必要はありません。例えば、 'df2 = pd.read_csv(StringIO(content)、...)'のように 'StringIO(content)'をファイルハンドルとして使用します。 – ptrj

+0

また、python3は読み込み時に自動的に '\ r'を' \ n'に置き換えているようです。したがって、あなたの 'f.read()。replace( '\ r'、 '')'は動作しません。その場合は、バイナリモードで読み込み、次にバイトを文字列に変換/デコードしてください。 – ptrj

0

前処理が最良の選択肢である可能性があります。しかし、あなたが何か他のものを探しているなら、あなたはread_csvlineterminator引数を試みることがあります。

df = pd.read_csv("my_df.csv", index_col=0, lineterminator='\n') 

(Linux上で私のために動作しますが、他のプラットフォームのために保証することはできません。)

関連する問題