【Pandas】DataFrameとは？DataFrameに使えるメソッドとアトリビュート no.10

![見出しを追加 (32).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/6d2d66f9-0e0e-754b-04a8-04ace31c1302.png)
こんにちは、まゆみです。

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

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


今日から少しの間、<font color="Red">Pandasの基本となる2つのデータストラクチャ―のうちの１つである『DataFrame』</font>についての記事を書いていきます。

(PandasではSeries とDataFrameの２つが主要なデータストラクチャ―と考えられ用いられています。Seriesに関してはno.9 以下の記事をご覧ください。)

#今回使うデータ
![2008年.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/3766cac9-5cfd-be5c-5694-59a138bcc707.png)


少し古いですが[2008年のMLBのデータ](http://www.exploredata.net/Downloads/Baseball-Data-Set)を使いますね。

<font color="Red">MLB選手のそれぞれのデータ</font>が出ていて面白いと思います([マネーボール](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%8D%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%AB_(%E6%98%A0%E7%94%BB))という映画を思い出しました。(笑)統計学を使って弱小チームを優勝に導いた実話をもとにした映画です)

では、さっそくMLBの選手を分析しつつDataFrameの解説をしていきますね。

※今回のデータは下記のようなCSVデータになります

![スクリーンショット 2021-03-16 094444.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/26f4573c-2285-b1f6-3c37-7c68a4cb3a2d.jpeg)


#SeriesとDataFrameの違い

Series とDataFrame の違いを簡単に言うなら

![本文を追加 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/2ac236a4-0c46-3495-1c4a-438405885ecb.png)


>DataFrame がエクセルシートのシート全体

>Seriesがエクセルの各コラム

になりますが、もう少し詳しく深堀りしてみましょう

Pandas のドキュメントから、SeriesとDataFrame についての定義を抜粋してみました。



![スクリーンショット 2021-03-16 074226.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a1f64c0c-cd2e-5df1-8a11-8356a4ee72dc.jpeg)

![スクリーンショット 2021-03-16 074304.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/aa9ea7de-53d5-50df-88ec-8776f3ee373b.jpeg)

引用元：[Pandasドキュメント](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html)

<font color="Red">Two dimensional(2次元の) とか One dimensional(1次元の)</font> とかって具体的にどういうことでしょうか？

##One dimensional　とは？

先ほど、Series とはエクセルシートの1コラムだけで作られたオブジェクトだということを申し上げました。

![スクリーンショット 2021-03-16 075655.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/826c457f-355a-f0a0-ae63-aeef2fdfcc8f.jpeg)

Series とは上のスクショのような構造になっています。

例えば上記のような構造になっているSeriesの中の、あるアイテムを特定したい時は、左横のrowの数値のみを指定すれば足りますよね。

なので、<font color="Red">Series は One dimensional なデータだと定義されている</font>のです。


##Two dimensional とは？

Pandas で作るDataFrame オブジェクトはTwo dimensional と定義されています。

![スクリーンショット 2021-03-16 080217.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a682cfc2-173b-68b4-84a0-377bf5e87a6f.jpeg)

例えば上記の例で『green tea』を指定するには、

rowと

column名

の<font color="Red">二つを指定しなければいけません。</font>

なのでTwo dimensional なデータです。

DataFrame はエクセルシート全体だと便宜上申し上げましたが、必ずしもデータの全部のみがDataFrame なのではなく、データを一部分だけ使うとしても、<font color="Red">もし2つのポイントを指定しなければいけない時は『DataFrame』になります</font>ので、そちらの理解でよろしくお願いします。

#SeriesとDataFrameで共通して使えるアトリビュートとメソッド

SeriesとDataFrameは分けて考える必要があります。

なぜならば、SeriesとDataFrameでは、使えるアトリビュートとメソッドが<font color="Red">違う場合があるから</font>です。

<font color="Red">『違う場合がある』</font>と言ったのは、一方では<font color="Red">共通して使えるアトリビュートとメソッド</font>もあります。

では共通して使えるアトリビュートとメソッドを下記に書いていきますね。(基本的な物だけを並べたので、もう少し詳しく知りたい方は、[Pandasのドキュメント](https://pandas.pydata.org/pandas-docs/stable/index.html)を見てくださいね)

Series と同じ要領でCSVファイルを読み込みます
　
(CSVファイルの読み込み方が分からない方は[こちらの記事](https://qiita.com/Mayumi_Pythonista/items/c29197abd4af408a8d17)を参考にどうぞ)

実行結果は下記のようになりました。

![スクリーンショット 2021-03-16 094629.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/d19a0811-367c-0376-7180-f2416cb1442f.jpeg)

##head()
![スクリーンショット 2021-03-16 095142.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/807af038-cfed-f8da-2120-7b3dc5dc96d2.jpeg)
引用元：[Pandasドキュメント](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.head.html#pandas.DataFrame.head)

head()メソッドは、データの最初の行5行分の値を返してくれます

<font color="Red">デフォルト値は５</font>でして、あなたの表示したい行数を引数に取るとその行分のデータを返してくれます。

実行結果は下記のようになります

![スクリーンショット 2021-03-16 095427.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/f1d69af8-7a1c-9450-0d37-f14c93923bb6.jpeg)

##tail()

head()が最初の5行なら、tail()は最後の5行を返してくれます。

それ以外はhead()メソッドと同じなので詳しい説明は端折りますね。

##index

index はrow に自動的に記載されるindex についての情報を返してくれます

![スクリーンショット 2021-03-16 095729.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/7cc6c245-d9b8-6387-07aa-ed71fa9aa4c9.jpeg)

![スクリーンショット 2021-03-16 100010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/e9eb9fa6-9ee1-5c32-6b45-9b1d125f862e.jpeg)

><font color="Red">start</font> =row の始まりの数字

><font color="Red">stop</font>= row の終わりの数字

><font color="Red">step</font> =いくつづつインデックスの数字が増えているか

##values

![スクリーンショット 2021-03-16 131123.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/35383f05-a8b8-2b5b-512e-de9649494695.jpeg)


ラップしているデータ配列を取り出してくれます



##shape
![スクリーンショット 2021-03-16 100630.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/5c15f8bb-b897-2429-8091-f9562e7cd03c.jpeg)


>データのrow数(何列のデータなのか？)と

>データのcolumn数(何行のデータなのか？)

をタプルで返してくれます

##dtypes

Series の場合はコラムが1行だけなので　dtype ですが、DataFrame はコラムが2行以上になるので

dtype<font color="Red">s</font>

と複数形になります


それぞれのコラムがどのデータ型になるか(integer(整数) なのかfloat(小数点)なのかなど)を返してくれます。

![スクリーンショット 2021-03-16 101244.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/73050516-e146-89ec-5387-aae85c5b1ee4.jpeg)

#DataFrame に独自のアトリビュート

##columns

Series にはそもそもcolumnが1行しかないので、columnsというアトリビュートはDataFrameに独自の物になります

columnsでは、コラム名を返してくれます

![スクリーンショット 2021-03-16 101859.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/fc067c18-bded-394b-b9ce-f717728f6ee7.jpeg)

#まとめ

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

DataFrame の基礎の基礎だけお伝えさせていただきました。

次回はもう少し詳しく掘り下げていこうと思います

よろしくお願いします！