前提
- 環境:Python 3.11.4
- 細かいパスの指定は省略
今回のゴール
'sample_data_2023-07-23.csv'や'2023-07-23_sample_data.csv'といった、任意の場所にある'yyyy-mm-dd'を抽出し、2列目にdateという列として、追加したい。sample.py
>>> import pandas as pd
>>> filename1 = 'sample_data_2023-07-23.csv'
>>> filename2 = '2023-07-24_sample_data.csv'
>>> df1 = pd.read_csv(filename1)
>>> df2 = pd.read_csv(filename2)
>>> df1.head()
id
0 1
1 2
2 3
3 4
4 5
>>> df2.head()
id
0 1
1 2
2 3
3 4
4 5
sample.py
#完成系
#'sample_data_2023-07-23.csv'の「2023-07-23」を抽出して、追加したい
>>> df1.head()
id date
0 1 2023-07-23
1 2 2023-07-23
2 3 2023-07-23
3 4 2023-07-23
4 5 2023-07-23
#'2023-07-24_sample_data.csv'の「2023-07-24」を抽出して、追加したい
>>> df2.head()
id date
0 1 2023-07-24
1 2 2023-07-24
2 3 2023-07-24
3 4 2023-07-24
4 5 2023-07-24
流れ
- 正規表現を使い、yyyy-mm-dd形式のデータを抽出
- 抽出したデータを変数に格納
- 新たな列に追加
1.正規表現を使い、yyyy-mm-dd形式のデータを抽出
sample.py
>>> import re
>>> filename1 = 'sample_data_2023-07-23.csv'
>>> filename2 = '2023-07-24_sample_data.csv'
#正規表現を使い、yyyy-mm-dd形式のデータを抽出
>>> re.search(r'\d{4}-\d{2}-\d{2}',filename1)
<re.Match object; span=(0, 10), match='2023-07-23'>
>>> re.search(r'\d{4}-\d{2}-\d{2}',filename2)
<re.Match object; span=(0, 10), match='2023-07-24'>
2.抽出したデータを変数に格納
sample.py
#group()を使うとマッチした箇所だけ抽出できる
>>> date1 = re.search(r'\d{4}-\d{2}-\d{2}',filename1).group()
>>> date2 = re.search(r'\d{4}-\d{2}-\d{2}',filename2).group()
>>> date1
'2023-07-23'
>>> date2
'2023-07-24'
3.新たな列に追加
sample.py
>>> import pandas as pd
#'2023-07-23_data.csv'をデータフレーム化
>>> df1 = pd.read_csv(filename1)
>>> df2 = pd.read_csv(filename2)
#dateを新たな列として追加
>>> df1['date'] = date1
>>> df2['date'] = date2
#中身を確認
>>> df1.head()
id date
0 1 2023-07-23
1 2 2023-07-23
2 3 2023-07-23
3 4 2023-07-23
4 5 2023-07-23
>>> df2.head()
id date
0 1 2023-07-24
1 2 2023-07-24
2 3 2023-07-24
3 4 2023-07-24
4 5 2023-07-24
まとめ
正規表現を使用し、ファイル名にあるyyyy-mm-dd形式のデータを抽出し、新たな列に格納することが出来ました。 以下に今までの内容をまとめた、サンプルコードを記載します。次回はまとめて複数ファイルの処理については更新予定ですので、少々お待ちください。
sample.py
>>> import pandas as pd
>>> import re
>>> filename1 = 'sample_data_2023-07-23.csv'
>>> filename2 = '2023-07-24_sample_data.csv'
#正規表現を使い、yyyy-mm-dd形式のデータを抽出
>>> date1 = re.search(r'\d{4}-\d{2}-\d{2}',file_name1).group()
>>> date2 = re.search(r'\d{4}-\d{2}-\d{2}',file_name2).group()
>>> df1 = pd.read_csv(file_name1)
>>> df2 = pd.read_csv(file_name2)
#dateを新たな列として追加
>>> df1['date'] = date1
>>> df2['date'] = date2
#中身を確認
>>> df1.head()
id date
0 1 2023-07-23
1 2 2023-07-23
2 3 2023-07-23
3 4 2023-07-23
4 5 2023-07-23
>>> df2.head()
id date
0 1 2023-07-24
1 2 2023-07-24
2 3 2023-07-24
3 4 2023-07-24
4 5 2023-07-24