ライブラリ

pandasの基本①

~ライブラリ~pandasの基本

pandasは「簡潔にデータを扱うために開発されたPythonのライブラリ」です。

CSVなどからデータを読み取り、追加、修正、削除などの処理をすることができます。

ここでは「pandasって何?」「pandasってどう使うの?」といった方へ、pandasの使い方を解説します。

また、「pandasで使える高機能な1次元配列と2次元配列」のようなものとしてよく使われる、SeriesとDataFrameの基本的な使い方も解説します。SeriesやDataFrameは標準で使える配列よりも、より多くの操作が可能な、Pythonでデータを扱う際には必須になりますので、ぜひ使えるようになりましょう。

なお、pandasをインストールしていない場合、まずはpip等でpandasをインストールしてください。

YouTubeも公開していますので、動画や音声で聞きたい方はぜひご覧ください。

【Pythonライブラリ】Pandasの基本②~プログラミング解説動画~

CSVファイルを読み込む

ではpandasを使っていきましょう。

まずはcsvファイルを読み込み、変数に入れてみましょう。

今回は以下ようなデータが入っているCSVファイルを読み込みます。

[CSVファイル]

index,name,age
0,塚田 栄一,45
1,岩村 真尋,21
2,中園 美希,41
3,猪股 幸平,34
4,及川 大介,34

[ソースコード]

import pandas as pd
data = pd.read_csv("test.csv",index_col = 0)
print(data)

[出力結果]

        name  age
index            
0      塚田 栄一   45
1      岩村 真尋   21
2      中園 美希   41
3      猪股 幸平   34
4      及川 大介   34

csvファイルのデータが変数dataに入っているのが分かります。

まずpandasをインポートしましょう。次にread_csv()でcsvファイルを読み込みます。

第一引数はcsvファイルのパスです。ここはお使いの環境によって異なる部分です。

第二引数はどの列をインデックスとするかを指定しています。今回はindex列を指定しています。

読み込んだデータの情報を取得する

ここでは先ほど読み込んだcsvデータの情報を取得する方法をご紹介します。

データの行数と列数を取得する-shape-

データの行数、列数が知りたい場合はshapeを使います。

import pandas as pd
data = pd.read_csv("test.csv",index_col = 0)
print(data.shape)

[出力結果]

(5, 2)

カラムの情報を取得する-columns-

読み込んだデータのカラムの情報が知りたい場合はcolumnsを使います。

import pandas as pd
data = pd.read_csv("test.csv",index_col = 0)
print(data.columns)

[出力結果]

Index(['name', 'age'], dtype='object')

データを先頭から指定した行数取得する-head()-

先頭から指定した行数分データを取得したい場合はhead()を使います。

import pandas as pd
data = pd.read_csv("test.csv",index_col = 0)
print(data.head(3))

[出力結果]

        name  age
index            
0      塚田 栄一   45
1      岩村 真尋   21
2      中園 美希   41

データを末尾から指定した行数取得する-tail()-

末尾から指定した行数分データを取得したい場合はtail()を使います。

import pandas as pd
data = pd.read_csv("test.csv",index_col = 0)
print(data.tail(3))

[出力結果]

        name  age
index            
2      中園 美希   41
3      猪股 幸平   34
4      及川 大介   34

読み込んだデータに列を追加する

次に、読み込んだcsvデータに、新しい列を追加しましょう。

次の例では、リストの情報を追加しています。

import pandas as pd
data = pd.read_csv("test.csv",index_col = 0)

list = [165, 170, 175, 180, 182]
series = pd.Series(list)
data["height"] = series.values

print(data)

[出力結果]

        name  age  height
index                    
0      塚田 栄一   45     165
1      岩村 真尋   21     170
2      中園 美希   41     175
3      猪股 幸平   34     180
4      及川 大介   34     182

最初に読み込んだcsvデータに「height」という列を追加しました。

リストを列に追加するには、pandasのSeries()を使います。引数にリストを渡すと、Seriesというデータ型に変換してくれます。最後にdataに新しく登録する列名をキーとして指定し、Seriesのvaluesでデータを入れています。

csvに出力する

最後に、列を追加したデータをcsvに出力してみましょう。

pandasではcsvやExcelファイル等への出力が簡単に行えます。

import pandas as pd
data = pd.read_csv("test.csv",index_col = 0)

list = [165, 170, 175, 180, 182]
series = pd.Series(list)
data["height"] = series.values

data.to_csv("output.csv")

先ほどのプログラムのprint()の箇所を、to_csv()というメソッドに置き換えています。

第一引数にcsvファイル名を指定することで使用できます。

また、to_excel()を使うとExcelファイルの出力も容易に行えます。

Seriesの基本操作

上記で少しふれたSeriesの基本操作です。Seriesはpandasで使える1次元配列になります。

Seriesの作成

Seriesを初期化するにはpandasのSeries()を使います。

import pandas as pd
s = pd.Series([76, 54, 92])
print(s)

[出力結果]

0    76
1    54
2    92

また、データに名前をつけたい場合は、第二引数を次のようにします。

import pandas as pd
s = pd.Series([76, 54, 92], index=["国語", "英語", "数学"])
print(s)

[出力結果]

国語    76
英語    54
数学    92

値を追加・変更・削除する

次に初期化済みのSeriesに対して、値の追加・変更・削除を行ってみましょう。

import pandas as pd
s = pd.Series([76, 54, 92], index=["国語", "英語", "数学"])
s["日本史"] = 99 #追加
s["英語"] = 62 #変更
s = s.drop("国語") #削除  
print(s)

[出力結果]

英語     62
数学     92
日本史    99

追加と変更はインデックスを使って参照します。

削除はdrop()を使います。drop()の第一引数にインデックスを指定してデータを削除します。

Series同士で足し算する

次に2つのSeriesのデータを足し算してみましょう。

import pandas as pd
s = pd.Series([76, 54, 92], index=["国語", "英語", "数学"])
s2 = pd.Series([34, 61, 22], index=["国語", "英語", "数学"])
print(s + s2)

[出力結果]

国語    110
英語    115
数学    114

2つのSeriesを+演算子で繋げるだけで、全てのデータを足し算できます。

ちなみに片方にしか存在しないインデックスがある場合は「NaN(非数)」になるので注意しましょう。

DataFrameの基本操作

次にDataFrameについて見ていきましょう。

pandasではDataFrameがデータ型の基本で、Seriesの集まりがDataFrameです。

DataFrameの作成

まずはDataFrameの初期化方法です。

csvやexcelを読み込む方法もありますが、今回はリストから作成してみましょう。

import pandas as pd
lists = [[1, 2 ,3], [4, 5, 6], [7, 8, 9]]
d = pd.DataFrame(lists)
d.index = ["1", "2", "3"]
d.columns = ["A", "B", "C"]
print(d)

[出力結果]

   A  B  C
1  1  2  3
2  4  5  6
3  7  8  9

DataFrameはDataFrame()に二次元配列を渡すことで作成できます。

また、index()は行の名前、columns()は列の名前を付けることができます。

列・行を追加する

次にDataFrameに列や行を追加する方法を見ていきましょう。

まずは列の追加方法からご紹介します。

import pandas as pd
lists = [[1, 2 ,3], [4, 5, 6], [7, 8, 9]]
d = pd.DataFrame(lists)
lists2 = [10, 11, 12]
d[3] = lists2
print(d)

[出力結果]

   0  1  2   3
0  1  2  3  10
1  4  5  6  11
2  7  8  9  12

四列目が追加されました。インデックス番号が3の列にリストを渡すことで列を追加しています。

では次に行の追加方法です。列の追加とほとんど変わりません。

import pandas as pd
lists = [[1, 2 ,3], [4, 5, 6], [7, 8, 9]]
d = pd.DataFrame(lists)
lists2 = [10, 11, 12]
d.loc[3] = lists2 #変更
print(d)

[出力結果]

    0   1   2
0   1   2   3
1   4   5   6
2   7   8   9
3  10  11  12

d.loc[3]の箇所を変えています。

行を追加する場合はlocというインスタンス変数を使います。

必要な値を取り出す

最後にDataFrame内の必要な値を取り出す処理を見てみましょう。

値にアクセスするには先ほども使ったlocを使います。

import pandas as pd
lists = [[1, 2, 3], [4, 5, 6]]
d = pd.DataFrame(lists)
d.index = ["1r", "2r"]
d.columns = ["A", "B", "C"]

print(d.loc["2r", "B"])

[出力結果]

5

このdataFrameは次のようになっています。

    A  B  C
1r  1  2  3
2r  4  5  6

今回はこの中から「2r行」の「B列」の値を取得しています。

locは次のように使います。

[構文]

loc[行のインデックス, 列のインデックス]

また、locはスライスに対応しているので、次のように一部を切り取ったデータを取得することも可能です。

import pandas as pd
lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
d = pd.DataFrame(lists)
d.index = ["1r", "2r", "3r"]
d.columns = ["A", "B", "C"]

print(d.loc["2r":"3r", "B":"C"])

[出力結果]

    B  C
2r  5  6
3r  8  9

[構文]

loc[行の開始インデックス:終了インデックス, 列の開始インデックス:終了インデックス]

pandasでは、ほかにも様々な処理ができますので、適宜調べてみると良いでしょう。

タイトルとURLをコピーしました