こんにちはヤク学長です。
データサイエンティスト兼ファーマシストで、アルゴリズムやBI開発を行っています。
本記事の目的は、「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
から、列名がA
とB
である列と、行番号が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
の範囲を指定し、列名がA
とB
の列を指定して、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」に真剣に取り組むための概要を解説します。
下記の方法で、簡単に概要を抑えることができます。
- 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
から、列名がA
とB
である列と、行番号が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
の範囲を指定し、列名がA
とB
の列を指定して、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()
メソッド
sort_values()
メソッドを使って、指定した列の値に従ってデータを並び替えることができます。以下に、基本的な使い方を示します。df.sort_values(by=’列名’)
このようにすると、列名
で指定した列の値に従って、DataFrameの行が昇順に並び替えられます。逆に、降順に並び替えたい場合は、以下のようにします。
df.sort_values(by='列名', ascending=False)
ascending
にFalse
を指定することで、降順に並び替えられます。
また、複数の列を指定して並び替えることもできます。以下に、例を示します。
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[行番号, 列番号]
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'] >= 30
が True
になる行だけが 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'] >= 30
が True
になる行だけが 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)
とすると、df1
とdf2
を縦方向に結合した新しい DataFrame が作成されます。merge
関数を使って、2つの DataFrame を特定の列を基準に結合することができます。例えば、pd.merge(df1, df2, on='key')
とすると、df1
とdf2
のkey
列を基準に結合された新しい DataFrame が作成されます。
どちらの場合も、元のデータフレームが変更されるのではなく、新しいデータフレームが作成されます。また、結合の場合には、結合に使うキーが重複しているかどうかや、欠損値が含まれているかどうかに注意する必要があります。
新しくデータを追加する copy→isin→shift
copy
copy()
メソッドは、Pandas のオブジェクト(Series
、DataFrame
)をコピーするためのメソッドです。データの複製を作成し、元のオブジェクトが変更されても複製されたデータに影響を与えないようにするために使用されます。
例えば、以下のような DataFrame
があるとします。
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
この場合、df
を df2
にコピーして、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 のオブジェクト(Series
、DataFrame
)の中から、特定の値を持つ行(または列)を抽出するためのメソッドです。
例えば、以下のような DataFrame
があるとします。
import pandas as pd
df = pd.DataFrame({'A': ['foo', 'bar', 'baz'], 'B': [1, 2, 3]})
この場合、A
列の中で foo
と bar
を含む行を抽出することができます。
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 の Series
や DataFrame
の値を指定した数値だけずらすためのメソッドです。主に時系列データを扱う際に使用されます。
例えば、以下のような 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 の Series
や DataFrame
を結合するための関数です。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つがあります。
- 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
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')
というわけで、今回は以上です。大変大変お疲れ様でした。
引き続きで、徐々に発信していきます。
コメントや感想を受け付けています。ちょっとした感想でもいいので嬉しいです。
それでは、以上です。