LoginSignup
0
1

More than 1 year has passed since last update.

データクレンジングを行っていこう!顧客名の変更と日付の変更

Last updated at Posted at 2022-08-20

1.今回用いるデータ

私はpythonでとても重要なデータクレンジングについて、様々な記事を書いております。
その中で今回用いるのは

『データクレンジングを行ってみよう!価格変更偏』の1番にあるデータを使っていきます。
良かったらダウンロードしてみてください。それではいきます

2.データの読み込み

import pandas as pd

kokyaku_data = pd.read_excel("kokyaku_daicho.xlsx")

kokyaku_dataは人が入力していると思われるので、とても汚いデータとなっております。
顧客名については、半角の空欄があったり全角の空欄があったり
登録日については、記述がばらばらであったりします
今回は、その2つをきれいにクレンジングしていきましょう。

kokyaku_data

顧客名	かな	地域	メールアドレス	登録日
0	須賀ひとみ	すが ひとみ	H市	suga_hitomi@example.com	2018/01/04
1	岡田  敏也	おかだ としや	E市	okada_toshiya@example.com	42782
2	芳賀 	はが のぞみ	A市	haga_nozomi@example.com	2018/01/07
3	荻野 	おぎの あい	F市	ogino_ai@example.com	42872
4	栗田 憲一	くりた けんいち	E市	kurita_kenichi@example.com	43127
...	...	...	...	...	...
195	川上 りえ	かわかみ りえ	G市	kawakami_rie@example.com	2017/06/20
196	小松 季衣	こまつ としえ	E市	komatsu_toshie@example.com	2018/06/20
197	白鳥 りえ	しらとり りえ	F市	shiratori_rie@example.com	2017/04/29
198	大西 隆之介	おおにし りゅうのすけ	H市	oonishi_ryuunosuke@example.com	2019/04/19
199	福井 美希	ふくい みき	D市	fukui_miki1@example.com	2019/04/23

3.顧客名をきれいにしよう

改めて顧客名を見ていきますか
0番は苗字と名前の間にスペースがありません。
1番は間が全角
2番は間が半角となっていて汚れておりますね

kokyaku_data["顧客名"]

0       須賀ひとみ
1      岡田  敏也
2        芳賀 
3       荻野  
4       栗田 憲一
        ...  
195     川上 りえ
196     小松 季衣
197     白鳥 りえ
198    大西 隆之介
199     福井 美希
Name: 顧客名, Length: 200, dtype: object

これを解決するためには、astypeメソッドとreplaceを用いれば解決できます。
replace(" " , "")としているのは半角の空欄から空欄なしにしています。
みてみると、1番は変更されていないものの、他は間がなくなっています。

kokyaku_data["顧客名"].astype("str").str.replace(" " , "")

0      須賀ひとみ
1      岡田 敏也
2        芳賀希
3        荻野愛
4       栗田憲一
       ...  
195     川上りえ
196     小松季衣
197     白鳥りえ
198    大西隆之介
199     福井美希

全角の間も同様な処理をしていきます。

# 半角空欄から空欄なし
kokyaku_data["顧客名"]=kokyaku_data["顧客名"]=kokyaku_data["顧客名"].astype("str").str.replace(" " , "")

# 全角空欄から空欄なし
kokyaku_data["顧客名"]=kokyaku_data["顧客名"]=kokyaku_data["顧客名"].astype("str").str.replace(" " , "")

みていきます

kokyaku_data["顧客名"]

0      須賀ひとみ
1       岡田敏也
2        芳賀希
3        荻野愛
4       栗田憲一
       ...  
195     川上りえ
196     小松季衣
197     白鳥りえ
198    大西隆之介
199     福井美希
Name: 顧客名, Length: 200, dtype: object

いい感じになりましたね。
それでは次にいきましょう。

4.日付データの変更

まずはデータを見ていきます
数値になっているものがあることがみられます。

kokyaku_data["登録日"]

0      2018/01/04
1           42782
2      2018/01/07
3           42872
4           43127
          ...    
195    2017/06/20
196    2018/06/20
197    2017/04/29
198    2019/04/19
199    2019/04/23
Name: 登録日, Length: 200, dtype: object

ここで、数字の登録日をほかの時間とどうようにしていきたいと思います。
まずは数字がどこにあるのかを探していきます。
astype("str")でいったん文字列とし、その中で数字があればTrueを返してくれるstr.isdigit()を使って、特定していきます。

kokyaku_data["登録日"].astype("str").str.isdigit()

0      False
1       True
2      False
3       True
4       True
       ...  
195    False
196    False
197    False
198    False
199    False
Name: 登録日, Length: 200, dtype: bool

これを変数に格納していき、それをlocメソッドで条件として抽出する作業をします。
二行目以降の説明をします。
まずは、数字となっている行且つ登録日を整数にし、それをtime_deltaで日付単位にします
その後、それを他の日付単位に合わせるためにto_datetimeで以下のような記述をします。

flg_is_serial = kokyaku_data["登録日"].astype("str").str.isdigit()

fromSerial = pd.to_timedelta(kokyaku_data.loc[flg_is_serial, "登録日"].astype("float"), unit="D") + pd.to_datetime("1900/01/01")

これでデータを見ていきましょう。
dtypeがdatetimeになっていることが分かります。
時系列データの分析を行う際は、この処理が欠かせないので忘れずに覚えておきましょう。

fromSerial

1     2017-02-18
3     2017-05-19
4     2018-01-29
21    2017-07-06
27    2017-06-17
47    2017-01-08
49    2017-07-15
53    2017-04-10
76    2018-03-31
80    2018-01-12
99    2017-06-01
114   2018-06-05
118   2018-01-31
122   2018-04-18
139   2017-05-27
143   2017-03-26
155   2017-01-21
172   2018-03-24
179   2017-01-10
183   2017-07-26
186   2018-07-15
192   2018-06-10
Name: 登録日, dtype: datetime64[ns]
0
1
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
1