0
0

More than 1 year has passed since last update.

【Python】CSVファイル名に記載のある日付を新しい列として追加してみた(その2)

Posted at

前提

  • 環境: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

流れ

  1. 正規表現を使い、yyyy-mm-dd形式のデータを抽出
  2. 抽出したデータを変数に格納
  3. 新たな列に追加

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0