2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Pandas】.str.split()メソッドを使い、NBA選手の名前と苗字について調べた no.23

Last updated at Posted at 2021-03-28

見出しを追加 (51).png
こんにちは、まゆみです。

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

今回の記事は、第23回目になります。

前回に引き続き、今回の記事でもPandasのDataFrameの中の文字列データを扱う方法を書いていこうと思います。

今回の記事では、Pythonでも使うsplit()メソッドを使って、NBA選手の名前を姓と名に分けてそのデータを色々と分析してみます。

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

今回使うデータ

NBA選手のデータを使わせてもらいます。

こちらのデータをread_csv()で読み込むと下記のようになります。
スクリーンショット 2021-03-28 080913.jpg

.split()メソッド

まず、.split()メソッドがどのような機能を持ったメソッドなのか、w3schools.comから定義を引用しました。

スクリーンショット 2021-03-28 075216.jpg
引用元:w3schools.com

Pythonの文字列に対して、.split()を使ってみますね。

空白で区切りたいので引数に、""を渡しました。

スクリーンショット 2021-03-28 080412.jpg
空白の部分で、それぞれの文字列が割かれリストにして返されました。

では、このsplit()メソッドをPandasのSeriesオブジェクトに対して使ってみます。

.split()メソッドをPandasのSeriesオブジェクトに使う

PandasのSeriesに対して、Pythonのメソッドを使うので、

Series.str.split()

のように、間に『.str』が必要です。
※詳しくは前回の記事にも書いています。

今回使うデータの、『player_name』と書かれたコラムを使い、選手の名前や苗字について調べていきます。

選手の名前と苗字が空白で区切られているので、split()メソッドを使い、名前と苗字を別々に取り出していきましょう

.str.split("")を使うと、実行結果は以下のようになりました。

スクリーンショット 2021-03-28 081734.jpg

その次に、返されたリストのなかのインデックス0のみを取り出したいので、

.str.get(0)

と続けて書きます。

スクリーンショット 2021-03-28 082221.jpg

それぞれの値がいくつあるか数えたいので

.str.value_counts()

と続けます。

スクリーンショット 2021-03-28 082527.jpg

NBA選手の中で、どんな名前の選手が何人いるのかのデータが取れました。

同様に、NBA選手の苗字について調べたい時は、.split()で分割した後、2番目の要素を取り出したいので、get()メソッドの引数を1にすれば大丈夫です。
スクリーンショット 2021-03-28 082851.jpg

ただ、外国人の名前は、名前の最後に『Jr.』が入っていたりミドルネームが入っている場合もあり

First-name , Last-name

になっていないところもあるかも知れません。

そこで便利なのが、str.split()のパラメーターexpandです。

.str.split()のパラメーターexpand

スクリーンショット 2021-03-28 084539.jpg
引用元:Pandasドキュメント

expandのデフォルト値はFalse ですが、True に変えると、DataFrameを返してくれます。

スクリーンショット 2021-03-28 084922.jpg
このようになりました。

インデックス11141の選手名には、Jr.がついています。

また、この返されたDataFrameを新たにDataFrameのコラム名に代入して、このデータをオリジナルのDataFrameの右端につけ足すこともできます

スクリーンショット 2021-03-28 091153.jpg

ただ、このままだと最後のコラム『blank』が不要な気がします。

Melvin Frazier Jr. (2).png

.str.split(" ", expand=True)でSeriesを空白で分割したDataFrameにした時に、選手の名前に最大3の空白があったので、4つのコラムを作らざるを得なかったのです。(.split()で4つに分割されたら、4つ新しいコラム名を作らないとエラーが出る)

.str.splitのパラメーターnの使い方

スクリーンショット 2021-03-28 094145.jpg

上記のような場合、3つの空白の部分で区切ってDataFrame にするのではなく、最初の2つの空白だけで区切りたいですよね。

そのような場合.str.split()のパラメーター n=の引数に区切りたい数を書けば大丈夫です。

2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?