正規表現によるSeirieからの文字抽出
pandasで下記のように","区切りで読み込めないようなファイルから、正規表現で必要な文字列だけを抽出してDataFrameにする方法
以下サンプルデータ、そのままread_csvするとカラム数が違うためエラーとなる。
test.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型等に適宜変更する必要がある。