私が試みているのは、データフレームを作成するためにcsvを読み取ることです---列に変更を加えます-再び変更された値を同じcsv(to_csv)に更新/反映します-もう一度そのcsvを読み取って別のデータフレームを作成しようとします...エラーが発生しています
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 7: invalid continuation byte
私のコードは
import pandas as pd
df = pd.read_csv("D:\ss.csv")
df.columns #o/p is Index(['CUSTOMER_MAILID', 'False', 'True'], dtype='object')
df['True'] = df['True'] + 2 #making changes to one column of type float
df.to_csv("D:\ss.csv") #updating that .csv
df1 = pd.read_csv("D:\ss.csv") #again trying to read that csv
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 7: invalid continuation byte
だから、どのようにエラーを回避し、そのcsvをデータフレームに再度読み込むことができるかを提案してください。
私はどこかでCSVへの読み書き中に「エンコード=何らかのコーデックタイプ」または「デコード=何らかのタイプ」が欠落していることを知っています。
しかし、私は正確に何を変更すべきか分からないので、助けが必要です。
読み込むファイルのエンコーディングがわかっている場合は、使用できます
pd.read_csv('filename.txt', encoding='encoding')
可能なエンコードは次のとおりです。 https://docs.python.org/3/library/codecs.html#standard-encodings
エンコードがわからない場合は、chardetを使用してみてください。ただし、動作が保証されているわけではありません。それは推測作業です。
import chardet
import pandas as pd
with open('filename.csv', 'rb') as f:
result = chardet.detect(f.read()) # or readline if the file is large
pd.read_csv('filename.csv', encoding=result['encoding'])
1つの簡単な解決策は、Sublime Textなどのエディターでcsvファイルを開き、「utf-8」エンコーディングで保存することです。その後、パンダを介してファイルを簡単に読み取ることができます。
このエラーは、データの最初の読み取りで発生しますか、それともデータを書き込んでから再度読み取った後の2回目の読み取りで発生しますか?私の推測では、CSVがUTF-8ではないエンコーディングを持っているため、データのfirst読み取りで実際に発生していると思われます。
そのCSVファイルをNotepad ++、Excel、またはLibreOfficeで開いてみてください。データソースにç(セディーユ付きC)文字が含まれていますか?存在する場合、表示されている0xE7バイトはおそらくLatin-1またはWindows-1252(Pythonでは「cp1252」と呼ばれる)でエンコードされたçです。
ドキュメント を見て、Pandas read_csv()
関数について、encoding
パラメーターがあります。これはエンコードの名前である必要がありますそのCSVファイルが含まれていることを期待しているので、次のようにread_csv()
呼び出しにencoding="cp1252"
を追加してみてください。
df = pd.read_csv(r"D:\ss.csv", encoding="cp1252")
ファイル名の前にr
という文字を追加したので、「生の文字列」と見なされ、バックスラッシュは特別に扱われないことに注意してください。そうすれば、ファイル名をss.csv
からnew-ss.csv
に変更しても驚くことはありません。文字列D:\new-ss.csv
はD
、:
、改行文字、e
、w
など.
とにかく、最初のread_csv()
呼び出しでそのエンコードパラメーターを試して、それが機能するかどうかを確認します。 (私はあなたの実際のデータを知らないので、推測に過ぎません。データファイルがプライベートではなく、大きすぎない場合は、データファイルを投稿してコンテンツを確認してください。推測するだけではありません。)
はい、このエラーが発生します。 notepad ++でcsvファイルを開き、エンコードメニューでエンコードを変更して、UTF-8に変換することで、この問題を回避できます。次に、ファイルを保存します。その後、もう一度pythonプログラムを実行します。
他の解決策は、ファイルのエンコード/デコードにpythonでコーデックモジュールを使用することです。私はそれを使用していません。
上記の方法は、インポートしてからファイルタイプを検出し、chardetをインポートするのに使用します
import pandas as pd
import chardet
with open('filename.csv', 'rb') as f:
result = chardet.detect(f.read()) # or readline if the file is large
pd.read_csv('filename.csv', encoding=result['encoding'])
私はpythonが初めてです。 Excelファイルの拡張子を手動で.csvに変更し、read_csvで読み取ろうとしたときに、この正確な問題に遭遇しました。ただし、Excelファイルを開いてcsvファイルとして保存すると、代わりに機能しているように見えました。