【Python】「Pandas」簡単速習‼【データ解析】

こんにちはヤク学長です。
データサイエンティスト兼ファーマシストで、アルゴリズムやBI開発を行っています。

本記事の目的は、「pythonの基本操作を知る」ことを目的としています。

【ステップアップ】「Pythonの実践」簡単速習‼【データ解析/応用⑩】

【本記事のもくじ】

まず、「Python」に真剣に取り組むための概要を解説します。
下記の方法で、簡単に概要を抑えることができます。

  • 1.Pandas

それでは、上から順番に見ていきます。
なお、本上記の方法を順番に抑えれば成果が出ます。

記事の内容は「転載 & 引用OK」問題ありません。

1.Pandas

Pandasとは

Pandasは、データ解析やデータ加工を行うためのPythonのライブラリの一つです。主に、表形式のデータ(2次元のデータ)を扱うことができます。Pandasは、NumPyライブラリに基づいて作られており、NumPyの配列を拡張したものと考えることができます。

Pandasを使うことで、以下のようなことができます。

  • CSVやExcelなどのファイルからデータを読み込む
  • データフレームの作成、結合、フィルタリング、グルーピングなどの操作
  • データの可視化
  • 欠損値の処理
  • 時系列データの扱い

Pandasは、データ解析や機械学習において、よく使われるライブラリの一つです。

1次元の配列、Seriesオブジェクト

PandasのSeriesオブジェクトは、1次元の配列に似たオブジェクトで、インデックスを持つことができます。NumPyの配列と異なり、Seriesオブジェクトの要素には、インデックスを指定してアクセスすることができます。Seriesオブジェクトは、次のように作成することができます。

import pandas as pd
# 1次元の配列からSeriesオブジェクトを作成する
s = pd.Series([1, 2, 3, 4, 5])
print(s)
# 出力結果:
# 0 1
# 1 2
# 2 3
# 3 4
# 4 5
# dtype: int64

上記のコードでは、pd.Series()関数を使って、1次元のリストからSeriesオブジェクトを作成しています。Seriesオブジェクトを出力すると、左側にインデックス、右側に要素の値が表示されます。この場合、インデックスはデフォルトの数値のインデックス(0から始まる)が割り当てられています。

Seriesオブジェクトの要素にアクセスする方法は、NumPyの配列と同様に、インデックスを指定してアクセスすることができます。以下の例では、Seriesオブジェクトの3番目の要素にアクセスしています。

print(s[2])
# 出力結果: 3

Seriesオブジェクトは、1次元の配列と似たようなオブジェクトですが、インデックスの付与によって、データを扱いやすくすることができます。

2次元の配列、DataFrame

PandasのDataFrameは、2次元の配列に似たオブジェクトで、行と列に対してそれぞれインデックスを持つことができます。DataFrameは、NumPyの配列と異なり、行と列それぞれに異なるデータ型の値を持つことができます。DataFrameオブジェクトは、次のように作成することができます。

import pandas as pd
# 2次元の配列からDataFrameオブジェクトを作成する
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(df)
# 出力結果:
# 0 1 2
# 0 1 2 3
# 1 4 5 6
# 2 7 8 9

上記のコードでは、pd.DataFrame()関数を使って、2次元のリストからDataFrameオブジェクトを作成しています。DataFrameオブジェクトを出力すると、左側に行インデックス、上部に列インデックスが表示され、その中に要素の値が表示されます。

DataFrameオブジェクトの要素にアクセスする方法は、行インデックスと列インデックスを指定してアクセスすることができます。以下の例では、DataFrameオブジェクトの2行目、3列目の要素にアクセスしています。

print(df.iloc[1, 2])
# 出力結果: 6

DataFrameオブジェクトは、2次元の配列に対して行と列にインデックスを付与することで、データを扱いやすくすることができます。また、列インデックスを指定して、列ごとに異なるデータ型を持つことができるため、様々な種類のデータを扱うことができます。

行・列に名前をつける

PandasのDataFrameオブジェクトには、行や列に名前を付けることができます。行名を指定するには、index属性を使用し、列名を指定するにはcolumns属性を使用します。以下は、DataFrameオブジェクトに行名と列名を指定する例です。

import pandas as pd
# 行名と列名を指定してDataFrameオブジェクトを作成する
df = pd.DataFrame([[1, 2], [3, 4]], index=['row1', 'row2'], columns=['col1', 'col2'])
print(df)
# 出力結果:
# col1 col2
# row1 1 2
# row2 3 4

上記のコードでは、index引数に['row1', 'row2']を、columns引数に['col1', 'col2']を指定してDataFrameオブジェクトを作成しています。このようにして行名や列名を指定することで、DataFrameオブジェクトの要素に対してより分かりやすいラベルを付与することができます。

また、行名や列名はindex属性やcolumns属性を使用して取得することができます。以下は、DataFrameオブジェクトの行名と列名を取得する例です。

print(df.index)
# 出力結果: Index(['row1', 'row2'], dtype='object')
print(df.columns)
# 出力結果: Index(['col1', 'col2'], dtype='object')

上記のコードでは、index属性とcolumns属性を使用して、DataFrameオブジェクトの行名と列名を取得しています。取得された行名や列名は、Indexオブジェクトとして返されます。

DataFrameの一部のみを表示させる

PandasのDataFrameオブジェクトでは、行と列のインデックスを指定することで、特定の範囲のデータを抽出することができます。

例えば、以下のようにDataFrameオブジェクトdfから、列名がABである列と、行番号が0から2の範囲の行のみを抽出することができます。

import pandas as pd
# DataFrameオブジェクトの作成
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# 列名が'A'と'B'の列と、行番号が0から2の範囲の行を抽出
subset_df = df.loc[0:2, ['A', 'B']]
print(subset_df)
# 出力結果:
# A B
# 0 1 4
# 1 2 5
# 2 3 6

上記のコードでは、locメソッドを使用して、行番号が0から2の範囲を指定し、列名がABの列を指定して、DataFrameオブジェクトの一部を抽出しています。locメソッドによって抽出されたデータは、新しいDataFrameオブジェクトとしてsubset_dfに代入されます。

head , tail

PandasのDataFrameオブジェクトでは、先頭や末尾の一部分だけを表示するheadメソッドやtailメソッドを使用することができます。

headメソッドはDataFrameの先頭から指定した行数だけを表示し、tailメソッドはDataFrameの末尾から指定した行数だけを表示します。引数を指定しない場合は、デフォルトで5行が表示されます。

以下は、headメソッドとtailメソッドを使用してDataFrameオブジェクトdfの先頭5行と末尾3行を表示する例です。

import pandas as pd
# DataFrameオブジェクトの作成
df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'B': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']})
# 先頭5行を表示
print(df.head())
# 末尾3行を表示
print(df.tail(3))

出力結果は以下のようになります。

A B
0 1 a
1 2 b
2 3 c
3 4 d
4 5 e
A B
7 8 h
8 9 i
9 10 j

headメソッドとtailメソッドは、大きなDataFrameオブジェクトを扱う場合に特に便利です。先頭や末尾の一部分だけを表示することで、DataFrameオブジェクトの構造や内容を素早く確認することができます。

index , colmns

PandasのDataFrameオブジェクトでは、行と列にそれぞれラベルをつけることができます。行のラベルはindex属性、列のラベルはcolumns属性を使用して設定することができます。

例えば、以下のようなDataFrameオブジェクトdfがあるとします。

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]})

この場合、行にラベルをつけるにはindex属性を使用します。以下の例では、index属性にリストを指定して行にラベルをつけています。

df.index = ['a', 'b', 'c']

列にラベルをつけるにはcolumns属性を使用します。以下の例では、columns属性にリストを指定して列にラベルをつけています。

df.columns = ['X', 'Y', 'Z']

設定したラベルは、index属性やcolumns属性を使用して取得することができます。例えば、以下のようにして行のラベルを取得することができます。

print(df.index)

出力結果は以下のようになります。

Index(['a', 'b', 'c'], dtype='object')

列のラベルを取得するには、以下のようにします。

print(df.columns)

出力結果は以下のようになります。

Index(['X', 'Y', 'Z'], dtype='object')

行や列にラベルをつけることで、DataFrameオブジェクトをより分かりやすく表現することができます。また、行や列のラベルを指定することで、行や列を指定した操作を行うことができるようになります。

describe

describe()は、PandasのDataFrameやSeriesの統計的な情報をまとめて表示するメソッドです。具体的には、以下の情報を表示することができます。

  • データの個数
  • 平均値
  • 標準偏差
  • 最小値
  • 第1四分位数
  • 中央値
  • 第3四分位数
  • 最大値

describe()メソッドは、以下のように呼び出します。

df.describe()

このとき、dfは対象となるDataFrameオブジェクトです。

例えば、以下のようなDataFrameオブジェクトdfがあるとします。

こんにちはヤク学長です。
データサイエンティスト兼ファーマシストで、アルゴリズムやBI開発を行っています。

本記事の目的は、「pythonの基本操作を知る」ことを目的としています。

【ステップアップ】「Pythonの実践」簡単速習‼【データ解析/応用⑩】

【本記事のもくじ】

まず、「Python」に真剣に取り組むための概要を解説します。
下記の方法で、簡単に概要を抑えることができます。

  • 1.Pandas

それでは、上から順番に見ていきます。
なお、本上記の方法を順番に抑えれば成果が出ます。

記事の内容は「転載 & 引用OK」問題ありません。

1.Pandas

Pandasとは

Pandasは、データ解析やデータ加工を行うためのPythonのライブラリの一つです。主に、表形式のデータ(2次元のデータ)を扱うことができます。Pandasは、NumPyライブラリに基づいて作られており、NumPyの配列を拡張したものと考えることができます。

Pandasを使うことで、以下のようなことができます。

  • CSVやExcelなどのファイルからデータを読み込む
  • データフレームの作成、結合、フィルタリング、グルーピングなどの操作
  • データの可視化
  • 欠損値の処理
  • 時系列データの扱い

Pandasは、データ解析や機械学習において、よく使われるライブラリの一つです。

1次元の配列、Seriesオブジェクト

PandasのSeriesオブジェクトは、1次元の配列に似たオブジェクトで、インデックスを持つことができます。NumPyの配列と異なり、Seriesオブジェクトの要素には、インデックスを指定してアクセスすることができます。Seriesオブジェクトは、次のように作成することができます。

import pandas as pd
# 1次元の配列からSeriesオブジェクトを作成する
s = pd.Series([1, 2, 3, 4, 5])
print(s)
# 出力結果:
# 0 1
# 1 2
# 2 3
# 3 4
# 4 5
# dtype: int64

上記のコードでは、pd.Series()関数を使って、1次元のリストからSeriesオブジェクトを作成しています。Seriesオブジェクトを出力すると、左側にインデックス、右側に要素の値が表示されます。この場合、インデックスはデフォルトの数値のインデックス(0から始まる)が割り当てられています。

Seriesオブジェクトの要素にアクセスする方法は、NumPyの配列と同様に、インデックスを指定してアクセスすることができます。以下の例では、Seriesオブジェクトの3番目の要素にアクセスしています。

print(s[2])
# 出力結果: 3

Seriesオブジェクトは、1次元の配列と似たようなオブジェクトですが、インデックスの付与によって、データを扱いやすくすることができます。

2次元の配列、DataFrame

PandasのDataFrameは、2次元の配列に似たオブジェクトで、行と列に対してそれぞれインデックスを持つことができます。DataFrameは、NumPyの配列と異なり、行と列それぞれに異なるデータ型の値を持つことができます。DataFrameオブジェクトは、次のように作成することができます。

import pandas as pd
# 2次元の配列からDataFrameオブジェクトを作成する
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(df)
# 出力結果:
# 0 1 2
# 0 1 2 3
# 1 4 5 6
# 2 7 8 9

上記のコードでは、pd.DataFrame()関数を使って、2次元のリストからDataFrameオブジェクトを作成しています。DataFrameオブジェクトを出力すると、左側に行インデックス、上部に列インデックスが表示され、その中に要素の値が表示されます。

DataFrameオブジェクトの要素にアクセスする方法は、行インデックスと列インデックスを指定してアクセスすることができます。以下の例では、DataFrameオブジェクトの2行目、3列目の要素にアクセスしています。

print(df.iloc[1, 2])
# 出力結果: 6

DataFrameオブジェクトは、2次元の配列に対して行と列にインデックスを付与することで、データを扱いやすくすることができます。また、列インデックスを指定して、列ごとに異なるデータ型を持つことができるため、様々な種類のデータを扱うことができます。

行・列に名前をつける

PandasのDataFrameオブジェクトには、行や列に名前を付けることができます。行名を指定するには、index属性を使用し、列名を指定するにはcolumns属性を使用します。以下は、DataFrameオブジェクトに行名と列名を指定する例です。

import pandas as pd
# 行名と列名を指定してDataFrameオブジェクトを作成する
df = pd.DataFrame([[1, 2], [3, 4]], index=['row1', 'row2'], columns=['col1', 'col2'])
print(df)
# 出力結果:
# col1 col2
# row1 1 2
# row2 3 4

上記のコードでは、index引数に['row1', 'row2']を、columns引数に['col1', 'col2']を指定してDataFrameオブジェクトを作成しています。このようにして行名や列名を指定することで、DataFrameオブジェクトの要素に対してより分かりやすいラベルを付与することができます。

また、行名や列名はindex属性やcolumns属性を使用して取得することができます。以下は、DataFrameオブジェクトの行名と列名を取得する例です。

print(df.index)
# 出力結果: Index(['row1', 'row2'], dtype='object')
print(df.columns)
# 出力結果: Index(['col1', 'col2'], dtype='object')

上記のコードでは、index属性とcolumns属性を使用して、DataFrameオブジェクトの行名と列名を取得しています。取得された行名や列名は、Indexオブジェクトとして返されます。

DataFrameの一部のみを表示させる

PandasのDataFrameオブジェクトでは、行と列のインデックスを指定することで、特定の範囲のデータを抽出することができます。

例えば、以下のようにDataFrameオブジェクトdfから、列名がABである列と、行番号が0から2の範囲の行のみを抽出することができます。

import pandas as pd
# DataFrameオブジェクトの作成
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# 列名が'A'と'B'の列と、行番号が0から2の範囲の行を抽出
subset_df = df.loc[0:2, ['A', 'B']]
print(subset_df)
# 出力結果:
# A B
# 0 1 4
# 1 2 5
# 2 3 6

上記のコードでは、locメソッドを使用して、行番号が0から2の範囲を指定し、列名がABの列を指定して、DataFrameオブジェクトの一部を抽出しています。locメソッドによって抽出されたデータは、新しいDataFrameオブジェクトとしてsubset_dfに代入されます。

head , tail

PandasのDataFrameオブジェクトでは、先頭や末尾の一部分だけを表示するheadメソッドやtailメソッドを使用することができます。

headメソッドはDataFrameの先頭から指定した行数だけを表示し、tailメソッドはDataFrameの末尾から指定した行数だけを表示します。引数を指定しない場合は、デフォルトで5行が表示されます。

以下は、headメソッドとtailメソッドを使用してDataFrameオブジェクトdfの先頭5行と末尾3行を表示する例です。

import pandas as pd
# DataFrameオブジェクトの作成
df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'B': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']})
# 先頭5行を表示
print(df.head())
# 末尾3行を表示
print(df.tail(3))

出力結果は以下のようになります。

A B
0 1 a
1 2 b
2 3 c
3 4 d
4 5 e
A B
7 8 h
8 9 i
9 10 j

headメソッドとtailメソッドは、大きなDataFrameオブジェクトを扱う場合に特に便利です。先頭や末尾の一部分だけを表示することで、DataFrameオブジェクトの構造や内容を素早く確認することができます。

index , colmns

PandasのDataFrameオブジェクトでは、行と列にそれぞれラベルをつけることができます。行のラベルはindex属性、列のラベルはcolumns属性を使用して設定することができます。

例えば、以下のようなDataFrameオブジェクトdfがあるとします。

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]})

この場合、行にラベルをつけるにはindex属性を使用します。以下の例では、index属性にリストを指定して行にラベルをつけています。

df.index = ['a', 'b', 'c']

列にラベルをつけるにはcolumns属性を使用します。以下の例では、columns属性にリストを指定して列にラベルをつけています。

df.columns = ['X', 'Y', 'Z']

設定したラベルは、index属性やcolumns属性を使用して取得することができます。例えば、以下のようにして行のラベルを取得することができます。

print(df.index)

出力結果は以下のようになります。

Index(['a', 'b', 'c'], dtype='object')

列のラベルを取得するには、以下のようにします。

print(df.columns)

出力結果は以下のようになります。

Index(['X', 'Y', 'Z'], dtype='object')

行や列にラベルをつけることで、DataFrameオブジェクトをより分かりやすく表現することができます。また、行や列のラベルを指定することで、行や列を指定した操作を行うことができるようになります。

describe

describe()は、PandasのDataFrameやSeriesの統計的な情報をまとめて表示するメソッドです。具体的には、以下の情報を表示することができます。

  • データの個数
  • 平均値
  • 標準偏差
  • 最小値
  • 第1四分位数
  • 中央値
  • 第3四分位数
  • 最大値

describe()メソッドは、以下のように呼び出します。

df.describe()

このとき、dfは対象となるDataFrameオブジェクトです。

例えば、以下のようなDataFrameオブジェクトdfがあるとします。

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]})

この場合、describe()メソッドを呼び出すと、以下のような統計的な情報が表示されます。

A B C
count 3.00000 3.00000 3.00000
mean 2.00000 5.00000 8.00000
std 1.00000 1.00000 1.00000
min 1.00000 4.00000 7.00000
25% 1.50000 4.50000 7.50000
50% 2.00000 5.00000 8.00000
75% 2.50000 5.50000 8.50000
max 3.00000 6.00000 9.00000

各列について、countがデータの個数、meanが平均値、stdが標準偏差、minが最小値、25%が第1四分位数、50%が中央値、75%が第3四分位数、maxが最大値を示しています。

DataFrame内のデータを並べ替える

sort_values()メソッド

PandasのDataFrameでは、sort_values()メソッドを使って、指定した列の値に従ってデータを並び替えることができます。以下に、基本的な使い方を示します。

df.sort_values(by=’列名’)

このようにすると、列名で指定した列の値に従って、DataFrameの行が昇順に並び替えられます。逆に、降順に並び替えたい場合は、以下のようにします。

df.sort_values(by='列名', ascending=False)

ascendingFalseを指定することで、降順に並び替えられます。

また、複数の列を指定して並び替えることもできます。以下に、例を示します。

df.sort_values(by=['列名1', '列名2'])

このようにすると、まず列名1で並び替えを行い、列名1の値が同じ場合は列名2で並び替えを行います。

なお、sort_values()メソッドは元のDataFrameを変更するわけではなく、並び替えた結果を返すだけです。元のDataFrameを変更したい場合は、inplace=Trueを指定します。

df.sort_values(by='列名', inplace=True)

列や行を指定して取り出す

loc属性やiloc属性

PandasのDataFrameでは、loc属性やiloc属性を使って、行や列を指定してデータを取り出すことができます。

loc属性は、行ラベルと列ラベルを使ってデータを指定します。以下に、基本的な使い方を示します。

df.loc[行ラベル, 列ラベル]

例えば、以下のようなDataFrameがあるとします。

import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}, index=['a', 'b', 'c'])

この場合、loc属性を使って、行bの列Aの値を取り出すには、以下のようにします。

df.loc['b', 'A']

結果は2となります。

iloc属性は、行番号と列番号を使ってデータを指定します。以下に、基本的な使い方を示します。

df.iloc[行番号, 列番号]
行番号や列番号には、Pythonのスライス表記を使うこともできます。例えば、以下のようにして、行0から1、列0から1までのデータを取り出すことができます。
df.iloc[0:2, 0:2]

この結果は、以下のようになります。

A B
a 1 4
b 2 5
なお、loc属性やiloc属性を使って、DataFrameからデータを取り出した場合、取り出されるデータは必ずしもDataFrameとして返されるわけではありません。一つの要素が返される場合もあれば、Seriesオブジェクトとして返される場合もあります。また、取り出されるデータがDataFrameの場合でも、必ずしも元のDataFrameと同じ形式で返されるわけではありません。

条件にあてはまるデータだけ抽出する

条件にあてはまるデータだけを抽出するには、条件式を用いてDataFrameの行をフィルタリングすることができます。具体的には、次のような手順で行います。

  • 条件式を作成します。例えば、df['age'] >= 30 とすると、age 列の値が 30 以上の行に対して True を返します。
  • 条件式を df に適用し、条件に合致する行だけを抽出します。以下のようになります。
df[df['age'] >= 30]

このコードでは、df['age'] >= 30True になる行だけが df から選択されます。

また、複数の条件を指定する場合は、条件式を括弧で囲み、&(かつ)や |(または)を用いて条件を連結します。例えば、以下のようにします。

df[(df['age'] >= 30) & (df['gender'] == 'female')]
このコードでは、age 列の値が 30 以上かつ gender 列の値が female の行だけが df から選択されます。

boolean index

Boolean Indexing とは、Pandas で DataFrame や Series のデータの一部を選択する際に、条件式を用いて選択する方法です。具体的には、次のような手順で行います。

  • DataFrame や Series に対して、条件式を適用した場合に True / False を返すような Boolean 型の配列(Boolean mask)を作成します。例えば、df['age'] >= 30 とすると、age 列の値が 30 以上の場合に True、それ以外の場合に False を返します。
  • 作成した Boolean mask を DataFrame や Series のインデックスに渡して、True の要素のみを選択します。以下のようになります。
df[df['age'] >= 30]

このコードでは、df['age'] >= 30True になる行だけが df から選択されます。

また、複数の条件を指定する場合は、条件式を括弧で囲み、&(かつ)や |(または)を用いて条件を連結します。例えば、以下のようにします。

df[(df['age'] >= 30) & (df['gender'] == 'female')]

このコードでは、age 列の値が 30 以上かつ gender 列の値が female の行だけが df から選択されます。

データの追加と結合

Pandas では、データの追加や結合には主に次の方法があります。

  • データの追加

    • loc または iloc を使って、行を追加することができます。例えば、df.loc[len(df)] = [1, 2, 3] とすると、df の最後に、[1, 2, 3] という値を持つ新しい行が追加されます。ただし、この方法は少し効率が悪いため、大量のデータを追加する場合は避けるべきです。
    • append メソッドを使って、別の DataFrame を現在の DataFrame に追加することができます。例えば、df = df.append(df2) とすると、df2 の行が df の最後に追加されます。
  • データの結合

    • concat 関数を使って、複数の DataFrame を縦方向または横方向に結合することができます。例えば、pd.concat([df1, df2], axis=0) とすると、df1df2 を縦方向に結合した新しい DataFrame が作成されます。
    • merge 関数を使って、2つの DataFrame を特定の列を基準に結合することができます。例えば、pd.merge(df1, df2, on='key') とすると、df1df2key 列を基準に結合された新しい DataFrame が作成されます。

どちらの場合も、元のデータフレームが変更されるのではなく、新しいデータフレームが作成されます。また、結合の場合には、結合に使うキーが重複しているかどうかや、欠損値が含まれているかどうかに注意する必要があります。

新しくデータを追加する copy→isin→shift

copy

copy() メソッドは、Pandas のオブジェクト(SeriesDataFrame)をコピーするためのメソッドです。データの複製を作成し、元のオブジェクトが変更されても複製されたデータに影響を与えないようにするために使用されます。

例えば、以下のような DataFrame があるとします。

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

この場合、dfdf2 にコピーして、df2 に対して変更を加えても、df には影響を与えないことができます。

df2 = df.copy()
df2['A'][0] = 100
print(df)
print(df2)

出力結果は以下のようになります。

A B
0 1 4
1 2 5
2 3 6
A B
0 100 4
1 2 5
2 3 6

df2 の最初の行を 100 に変更したところ、df には影響を与えず、df は変更されていません。

isin

isin() メソッドは、Pandas のオブジェクト(SeriesDataFrame)の中から、特定の値を持つ行(または列)を抽出するためのメソッドです。

例えば、以下のような DataFrame があるとします。

import pandas as pd
df = pd.DataFrame({'A': ['foo', 'bar', 'baz'], 'B': [1, 2, 3]})

この場合、A 列の中で foobar を含む行を抽出することができます。

mask = df['A'].isin(['foo', 'bar'])
filtered_df = df[mask]
print(filtered_df)

出力結果は以下のようになります。

A B
0 foo 1
1 bar 2

isin() メソッドは、特定の値を持つ行を抽出するためによく使用されます。

shift

shift() メソッドは、Pandas の SeriesDataFrame の値を指定した数値だけずらすためのメソッドです。主に時系列データを扱う際に使用されます。

例えば、以下のような Series があるとします。

import pandas as pd
s = pd.Series([1, 2, 3, 4, 5])

この Series の値を 2 つずらしたい場合は、以下のようにします。

shifted_s = s.shift(2)
print(shifted_s)

出力結果は以下のようになります。

0 NaN
1 NaN
2 1.0
3 2.0
4 3.0
dtype: float64

shift() メソッドの引数には、正の数を指定すると下に、負の数を指定すると上にずらすことができます。また、ずらした後の空いた値には NaN が入ります。

データの結合 concat

concat() 関数は、Pandas の SeriesDataFrame を結合するための関数です。concat() 関数は、横方向(列方向)または縦方向(行方向)にデータを結合することができます。

例えば、以下のような 2 つの DataFrame があるとします。

import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [4, 5, 6], 'B': [7, 8, 9]})

これらの DataFrame を横方向に結合する場合は、以下のようにします。

concatenated_df = pd.concat([df1, df2], axis=1)
print(concatenated_df)

出力結果は以下のようになります。

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

concat() 関数の axis 引数に 1 を指定することで、横方向に結合することができます。また、縦方向に結合する場合は axis 引数を指定せずに concat([df1, df2]) のように書くことができます。

データをグループでまとめる

Pandasを使ってデータをグループでまとめる方法には、主に以下の2つがあります。

  • groupby関数を使用する方法
  • pivot_table関数を使用する方法

以下でそれぞれの方法について説明します。

Pandasを使ってデータをグループでまとめる方法には、主に以下の2つがあります。

  • groupby関数を使用する方法
  • pivot_table関数を使用する方法

以下でそれぞれの方法について説明します。

groupby関数を使用する方法

groupby関数は、データをグループ化して集約するための関数です。groupby関数を使ってデータをグループでまとめる手順は以下の通りです。

  • グループ化したいキーを指定する(列名など)
  • groupby関数でデータをグループ化する
  • 集約関数(sum, meanなど)を適用して、グループごとの集計結果を取得する

例えば、以下のようなデータがあるとします。

import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'],
'score': [80, 70, 90, 85, 75, 95]
})

このデータを、name列でグループ化して、グループごとの平均点を求めるには、以下のようにします。

# nameでグループ化して、scoreの平均値を計算する
grouped = df.groupby('name')['score'].mean()
print(grouped)

出力結果:

name
Alice 82.5
Bob 72.5
Charlie 92.5
Name: score, dtype: float64

Pandasを使ってデータをグループでまとめる方法には、主に以下の2つがあります。

  1. groupby関数を使用する方法
  2. pivot_table関数を使用する方法

以下でそれぞれの方法について説明します。

groupby関数を使用する方法

groupby関数は、データをグループ化して集約するための関数です。groupby関数を使ってデータをグループでまとめる手順は以下の通りです。

  1. グループ化したいキーを指定する(列名など)
  2. groupby関数でデータをグループ化する
  3. 集約関数(sum, meanなど)を適用して、グループごとの集計結果を取得する

例えば、以下のようなデータがあるとします。

python
import pandas as pd

df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'],
'score': [80, 70, 90, 85, 75, 95] })

このデータを、name列でグループ化して、グループごとの平均点を求めるには、以下のようにします。

scss
# nameでグループ化して、scoreの平均値を計算する
grouped = df.groupby('name')['score'].mean()

print(grouped)

出力結果:

yaml
name
Alice 82.5
Bob 72.5
Charlie 92.5
Name: score, dtype: float64

pivot_table関数を使用する方法

pivot_table関数は、データをピボットテーブル形式で表示するための関数です。pivot_table関数を使ってデータをグループでまとめる手順は以下の通りです。

  • グループ化したいキーを指定する(列名など)
  • pivot_table関数でデータをグループ化する
  • 集約関数(sum, meanなど)を適用して、グループごとの集計結果を取得する

例えば、以下のようなデータがあるとします。

import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'],
'subject': ['Math', 'Math', 'Math', 'English', 'English', 'English'],
'score': [80, 70, 90, 85, 75, 95]
})

このデータを、name列とsubject列でグループ化して、グループごとの平均点を求めるには、以下のようにします。

# pivot_table関数でグループ化して、scoreの平均値を計算する
grouped = df.pivot_table(values='score', index='name', columns='subject', aggfunc='mean')

というわけで、今回は以上です。大変大変お疲れ様でした。
引き続きで、徐々に発信していきます。

コメントや感想を受け付けています。ちょっとした感想でもいいので嬉しいです。

それでは、以上です。

最新情報をチェックしよう!