【re:dash】PythonでGoogleSpreadSheetのデータを読み込んだら日本語の列名が認識されなかった問題
起こったこと
re:dashのPythonで、スプレッドシートの内容をexecute→カラム名を選択した際、カラム名が日本語のものだけ処理がうまくいなかった(同じ文字だと認識されていない?)
import pandas as pd query_res = execute_query('GoogleSpreadSheet', '{スプレッドシート名}|{シート番号}') ss_df = pd.DataFrame(query_res['rows'], columns=query_res['rows'][0].keys()) print(ss_df) print(ss_df.filter(['id', 'col1', 'カラム1']))
col1 カラム1 id 0 a あ 1 1 b い 2 2 c う 3 3 d え 4 4 e お 5 id col1 0 1 a 1 2 b 2 3 c 3 4 d 4 5 e
解決方法
エンコードを確認したところ、 スプレッドシートから読み込んだDF→ascii Pythonのエンコード→utf-8 だった。
import chardet print(chardet.detect(ss_df.columns.values[2]) ) print(chardet.detect('カラム1'))
{'confidence': 1.0, 'language': '', 'encoding': 'ascii'} {'confidence': 0.87625, 'language': '', 'encoding': 'utf-8'}
import pandas as pd query_res = execute_query('GoogleSpreadSheet', '{スプレッドシート名}|{シート番号}') # 列名のエンコードの変更 utf8_col= {} for i in query_res['rows'][0].keys(): utf8_col[i] = i.encode('utf-8') ss_df = pd.DataFrame( query_res['rows'], columns=query_res['rows'][0].keys() ).\ rename(columns = utf8_col) print(ss_df.filter(['id', 'col1', 'カラム1']))
id col1 カラム1 0 1 a あ 1 2 b い 2 3 c う 3 4 d え 4 5 e お