【Pandas】テキストデータの処理の仕方 ($や￥があって計算できない！を解決する)　no.22

![見出しを追加 (50).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/19162b8c-adf1-ed90-13d1-eb9033b3936b.png)
こんにちは、まゆみです。

Pandasについての記事をシリーズで書いています。

今回は22回目になります。

今回の記事からしばらくの間、DataFrameの中のテキストの処理の仕方について書いていきます

DataFrameの値の中には、

<ul>
<li>望まないところにスペースが入っていたり</li>
<li>全て大文字で書かれていたり</li>
<li>一つのセルに複数の値が入っていたり</li>
<li>他もろもろ。。。</li>
</ul>

で、あなたが望む処理ができない時があります。

そのような時の解決策を、今回の記事から少しずつ紹介していこうと思います。

今回の記事では

<ul>
<li>Pythonのテキストに関するメソッドをPandasで使う時に必要なこととは？</li>
<li>給料の前に『$』がついていて計算のメソッドが使えないとき、どうしたら良いのか？</li>
</ul>

を書いていきます

ではさっそく始めていきますね。

#Pythonの文字列に関するメソッドを使う時に必要な『.str』

Pandasでデータを処理したい時に、合わせてPythonの文字列に関するメソッドも使いたい時があると思います。

例えば

>.lower() 全てを小文字にするメソッド

>.upper() 全てを大文字にするメソッド

>.title() スペースで区切られたそれぞれの単語の最初の文字だけを大文字にするメソッド

>.len() 文字数を数えてくれるメソッド


など、上記に示した以外のPythonメソッドも使いたい時があると思います。

その時に、必要となるのが『.str』になります

![Series.str.lower().png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/4c4bf0ee-52d1-ebba-2b9f-0b946fbcdcd6.png)
上記の様に、<font color="Red">Series(もしくは、DataFrame["コラム名"])とPythonのメソッドの間に.str</font>を入れます。

具体例を出していきますね。

#今回使うデータ

[卒業学部とサラリーの関係のデータ](https://www.kaggle.com/wsj/college-salaries?select=degrees-that-pay-back.csv)を使っていきます。

ある大学学部を卒業した時の初任給や経験を積んだ後の、サラリー額上位10％の値や、下位10％の値などのデータになっています。
興味のある方は是非、見てみてくださいね。



今回使うデータの中の、<font color="Red">『Undergraduate Major』というコラムのなかの値が全て文字列になっている</font>ので、このコラムを使ってPythonのメソッドが使えるか試してみます。

![スクリーンショット 2021-03-27 090740.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/092ae11b-d1a0-7960-003e-e34021af959b.jpeg)
全て、期待通りに実行されました。

１つ注意点は<font color="Red">.len()メソッドを使う時、スペースも1文字としてカウントされる</font>ということです。

#Salaryを文字列から数列にする

例えば、給料のデータに 

￥マークや$ マークがついていたり、カンマ(,)が3桁ごとに打たれているデータをよく見かけると思います。

<font color="Red">$ 100,000は数列ではなく、文字列になるので計算に関するメソッドなどが使えない</font>ですよね。

そこで

>①$マークや、カンマをPythonの、.replace()メソッドで、取り除く

>②Pandasのastype()でデータのタイプを変更する

で、計算のメソッドが使える数列に変更します

##Pythonの.replace()メソッド

![replace( _変更したい文字_, _変更後の文字_).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/57470b31-88ff-9549-ef18-c94d436f8d76.png)
要らない文字を削除するというよりは、<font color="Red">$とカンマを空白に置き換える(=replace)</font>と考えてください。

また、今回のように2か所変更したい文字がある($を取り除くことと、カンマを取り除くという2か所)がある場合は、

```
.replace("A","").replace("B","")
```
と.replace()を２つ繋げます。(""が文字列の無い事を表しています)

PandasのSeriesオブジェクトに対してPythonのメソッドを使う時は、先ほど説明したように、<font color="Red">.strをオブジェクトとPythonのメソッドの間</font>に入れます。

```
Series.str.replace("A","").str.replace("B","")
```
で大丈夫です。

![スクリーンショット 2021-03-27 102802.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/61128897-d918-2c6e-c33a-b05e953e554d.jpeg)
期待通りの結果になりました。

次はデータ型を変更します

##.astype()メソッド

今回、Starting Median Salary(初任給)と名前の付いたコラムのデータを文字列から数列に変更するのに

>.astype()メソッド

を使います

.astype()は万能なメソッドで、引数に変更したいデータ型を書くと、そのデータ型に変更する事ができます


今回は、小数点(floating number)　に変更したいので

```
.astype(float)
```

と先ほど、$ とカンマを取り除いた後のコードに書き足します
(.astype()と.to_numeric()の違いについては、また別の記事で書いていきたいと思います。)

では、文字列だったサラリーのコラムを数列に変更して、いろんなメソッドを使って、サラリーのデータから、

>初任給が最高のサラリー額や

>全学部の平均サラリー額

などを出してみましょう。
(※計算に便利なメソッドは[こちらの記事](https://qiita.com/Mayumi_Pythonista/items/51b9b7248a167afe8beb)にまとめていますので、良かったら参考にどうぞ)
![スクリーンショット 2021-03-27 123603.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/0942a5da-10d3-a1be-a8f8-bd28a4433a33.jpeg)

#まとめ

今回の記事はこれくらいで終わりにします。

お役に立てれば幸いです。