2017-10-08 27 views
1

私はこのようにpandasを使用してCSV文字列を生成しています: df.to_csv(sep=',', encoding='utf-8', index=False, header=False)Csv文字列からキャリッジリターンを取り除く

私はポストグラムにcsvを次のようにロードします。私はcsv_str.replace('\r', '')を使用して削除し、CSV、キャリッジリターンが存在したときに

COPY table_name FROM STDIN (FORMAT CSV, 
    DELIMITER ',', 
    HEADER FALSE, 
    NULL '', 
    ENCODING 'utf-8'); 

時折、これは失敗します。しかし、私は、このアプローチがCSV内のいくつかの既存データを何らかの形で変更するかどうかはわかりません。

キャリッジリターンを削除する信頼性の高い方法はありますか?私はキャリッジリターンに関する情報を失うのは問題ないですが、私はcsvファイルに格納されている他のデータを可能な限り保存したいと思います。

答えて

1

キャリッジリターンをCSVファイルから取り除くのではなく、CSVファイルを含むフィールドが引用符で囲まれていることを確認してください。

import csv 
import pandas as pd 

df.to_csv(sep=',', encoding='utf-8', index=False, header=False, quoting=csv.QUOTE_ALL) 

また、あなたが\rを含んでいる可能性が高いフィールドだけを引用するquoting=csv.QUOTE_NONNUMERICを使用することができます。一つの方法は、すべてのフィールドをただ引用することです。

もう1つの方法は、\r\n(またはちょうど\r)に設定し、間接的に\rを含むフィールドを引用符で囲むことです。それを必要とするものだけ個々の「セル」が引用されているので、これが好まれることがあります

df.to_csv(sep=',', encoding='utf-8', index=False, header=False, line_terminator='\r\n') 
+0

私はすべての3つの方法を試してみた、と 'line_terminator'を使って一つだけが動作しているようですが、残りはすべてヌルにさせます引用符付きで、空の文字列と区別がつかない。しかし、私は可能な場合は、見積り方法を好むでしょう。そのための回避策はありますか? – user113531

+0

NULL表現を別の文字列に変更することができます(例: '\ N'を使って' \ N'を呼び出し、 'COPY'コマンドで' NULL '\ N''を使っていますが、残念なことにpandasは '\ N'を引用し、' COPY'はその値をNULLです。だから私は答えはノーだと思うし、 'line_terminator'を設定する必要があります。 – mhawke

関連する問題