web-dev-qa-db-ja.com

列名に特殊文字(アクセント)を含むPandas.read_csv()

列名を持つデータを含むcsvファイルがあります。

  • 「期間」
  • "IAS_brut"
  • "IAS_lissé"
  • "Incidence_Sentinelles"

3番目の問題 "IAS_lissé"に問題があり、pd.read_csv()メソッドおよびとして返されます。

そのキャラクターは何ですか?

flaskアプリケーションでバグを生成しているため、ファイルを変更せずに他の方法でその列を読み取る方法はありますか?

In [1]: import pandas as pd

In [2]: pd.read_csv("Openhealth_S-Grippal.csv",delimiter=";").columns

Out[2]: Index([u'PERIODE', u'IAS_brut', u'IAS_liss�', u'Incidence_Sentinelles'], dtype='object')
11
farhawa

Read_csvのencodingパラメーターを変更できます。pandas doc here を参照してください。また、python標準エンコード ここ です。

あなたの例では、utf-8エンコード(言語がフランス語であると仮定)。

df = pd.read_csv("Openhealth_S-Grippal.csv", delimiter=";", encoding='utf-8')

サンプル出力を示す例を次に示します。問題の文字を使用して、1列のCSVファイルを作成するだけでした。

df = pd.read_csv('sample.csv', encoding='utf-8')

出力:

    IAS_lissé
0   1
1   2
2   3
4
shawnheide

私はスペイン語で同じ問題を見つけ、「latin1」エンコーディングで解決しました:

import pandas as pd

 pd.read_csv("Openhealth_S-Grippal.csv",delimiter=";", encoding='latin1')

それが役に立てば幸い!

Utf-8を使用してもうまくいきませんでした。例えば。このコード:

    bla = pd.DataFrame(data = [1, 2])
    bla.to_csv('funkyNamé , things.csv')
    blabla = pd.read_csv('funkyNamé , things.csv', delimiter=";", encoding='utf-8')
    blabla 

最終的に返される:OSError:ファイルからの初期化に失敗しました

ファイルを変更したくないと言ったことは知っています。ファイルの内容とファイル名を意味する場合、ファイルの名前をアクセントなしに変更し、csvファイルを新しい名前で読み取り、ファイル名を元の名前にリセットします。

    originalfilepath = r'C:\Users\myself\\funkyNamé , things.csv'
    originalfolder = r'C:\Users\myself'
    os.rename(originalfilepath, originalFolder+"\\tempName.csv")
    df = pd.read_csv(originalFolder+"\\tempName.csv", encoding='ISO-8859-1')
    os.rename(originalFolder+"\\tempName.csv", originalfilepath)

「ファイルを変更せずに」を意味した場合名前、役に立たないことをおforびします。これが他の人の助けになることを願っています。

2
pantherenoire