(120) PandasでCSVファイルの中身を変更してCSVファイルに保存

投稿者: | 2024年2月6日

63 views

【1】やりたいこと

以下の CSVファイルがある。

田中 一郎,1978/5/25,神奈川県伊勢原市鈴川2-5
加藤 淳也,1982/8/30,徳島県鳴門市撫養町斎田大堤14
佐伯 裕二,1990/4/12,新潟県上越市土橋1914
串本 直樹,1976/5/11,宮崎県児湯郡都農町下浜3丁目

これを、以下の仕様でデータ変換したい。
1. 名字だけにする。
2. 年だけにする。
3. 番地以降を削除する。

↓ 以下のようにしたい。

田中,1978,神奈川県伊勢原市鈴川
加藤,1982,徳島県鳴門市撫養町斎田大堤
佐伯,1990,新潟県上越市土橋
串本,1976,宮崎県児湯郡都農町下浜

【2】やってみる

一先ず以下のコードで実現できた。

予想外の動きをしてくれたのが re.sub() のところだ。
正規表現で \d.* つまり数字が出現した後を削除するように指定しているところだ。

なんと!
半角数字だけでなく、全角数字も処理対象にしてくれている!!

import pandas as pd
import re

# CSVファイルをロード
file_path = 'data.csv'
df = pd.read_csv(file_path, header=None)

# 第1列: 苗字を抽出
df[0] = df[0].str.split().str[0]

# 第2列: 年を抽出
df[1] = df[1].str.split('/').str[0]

# 第3列: 住所の番地以降を削除
df[2] = df[2].apply(lambda x: re.sub(r'\d.*', '', x))

# CSVファイルとして出力
output_path = 'data_conv.csv'
df.to_csv(output_path, index=False, header=False, encoding='utf-8')

以下のように、すべてを df[n].apply で書くこともできる。

# 第1列: 苗字を抽出
df[0] = df[0].apply(lambda x: x.split()[0])

# 第2列: 年を抽出
df[1] = df[1].apply(lambda x: x.split('/')[0])

# 第3列: 住所の番地以降を削除
df[2] = df[2].apply(lambda x: re.sub(r'\d.*', '', x))

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です