pandas備忘録
私が引っかかったポイントまとめ。
データ入力
read_csvの文字コード指定
基本的にread_csvでデータを読むことが多いので、read_csv利用時の注意事項。
csvデータのエンコード形式に注意、特にWindows+excelで作成したcsvファイルの読み込み時
df = pd.read_csv('hoge.csv',header=0,encoding='Shift_JIS')
"UnicodeDecodeError:"が発生した。これは文字コードが正しく指定できていないということ、 Shift_JISx0213 を指定するとうまく通った。
df = pd.read_csv('hoge.csv',header=0,encoding='Shift_JISx0213')
データ整形
正規表現によるSeirieからの文字抽出
下記のように","区切りで読み込めないようなファイルから、正規表現で必要な文字列だけを抽出してDataFrameにする方法
以下サンプルデータ、そのままread_csvするとカラム数が違うためエラーとなる。
value1=12333,value2(fuga,hoge),value3=fuga value1=111,value2(hoge),value3=fugahoge
読み取る場合はまず一列のデータとして読み取る。
In[2]: import pandas as pd In[3]: df = pd.read_csv('test.csv',header=None,sep='\t') In[4]: df Out[4]: 0 0 value1=12333,value2(fuga,hoge),value3=fuga 1 value1=111,value2(hoge),value3=fugahoge
正規表現を持ちいた分割にはSeries.str.extract()を利用して分割する。
In[5]: df[0].str.extract('value1=(?P<val1>\d+),value2\((?P<val2>[\w,]+)\),value3=(?P<val3>.*)') Out[5]: val1 val2 val3 0 12333 fuga,hoge fuga 1 111 hoge fugahoge
”()”の中身が実際に抽出する値、”?P<hoge>”の部分でカラム名を指定できる。 指定しない場合は頭から順番に番号が振られる。
また、抽出した値はobjectとして返されるので、int型等に適宜変更する必要がある。