概要
- データ処理の下準備として、csvファイルのデータクリーニングをする
- 空白、記号、数字、単語の削除、単語の切り出し、特定のデータ要素への書き込み、csv出力
- Python 3.x系, Pandas, reを利用
- メモ代わりに書き出してみたものです: テクニカルタームの誤り、説明不十分な点が多いと思いますので、随時修正します
実際のコード
0. ライブラリの読み込み
今回はpandas
とre
(正規表現利用のためのモジュール)を利用する
import pandas as pd
import re
1. データの読み込み
df = pd.read_csv("filename.csv")
2. いらない要素(空白、記号、数字、単語)の削除
列全体を対象とし、いらない要素の削除を行う
df['列名'] = df['列名'].str.replace(r'(\d)', '') # 数字を削除
df['列名'] = df['列名'].str.replace('-', '') # 記号を削除
df['列名'] = df['列名'].str.replace('word', '') # 単語を削除
df['列名'] = df['列名'].str.strip() # 冒頭・末尾の空白を削除
df['列名'] = df['列名'].str.replace(r'(\d)', '').str.replace('-', '').str.replace('あ', '').str.strip()
# これらは同時に実行することもできる
3. 単語の切り出し
やりたいこと
name
という列に、複数の単語からなる要素がそれぞれ存在するとする
例:
df['name'][0] = "I have a pen."
df['name'][1] = "She has a pen."
これに対し、はじめの単語を抜き出し、subject
という新しい列にリストとして格納する
例:
df['subject'][0] = "I"
df['subject'][1] = "She"
コード
temp = df['name'].str.split() # 単語に分解
subject = [] # 切り出した単語を格納するための空のリストを作成
for item in temp:
subject.append(item[0]) # 各行の最初の単語をリストに格納
df['subject'] = subject # subjectという列名でもとのデータフレームに追加
4. 特定のデータ要素に書き込む
.at[]
を使うことで特定のデータにアクセスすることができる
df.at['行名','列名'] = "これはテストです"
df.at[行番号,'列名'] = "これはテストです"
5. csv出力
最後に、編集したデータフレームをcsvに出力する。encoding='utf_8_sig'
を付加することで、文字化けを防ぐことができる。
df.to_csv("filename_v2.csv", encoding='utf_8_sig')