Help us understand the problem. What is going on with this article?

Seriesからの正規表現によるデータ一括抽出方法

More than 3 years have passed since last update.

正規表現による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型等に適宜変更する必要がある。

参考

http://sinhrks.hatenablog.com/entry/2014/12/06/233032

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away