WAWAWA_CHCHCH

業務中に出た「ちょっと困ったこと」をメモする場

【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'}

列名のエンコード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    お