Pandas
PandasはPythonでデータ操作や解析を行うための強力なライブラリで、特に構造化データを扱うのに便利です
1. Pandasとは
Pandasは、データ分析のために設計されたオープンソースのPythonライブラリです。データの読み込み、変形、分析など、多岐にわたる機能を提供します。Pandasを使うと複雑なデータ操作がシンプルかつ効率的に行えるため広く利用されています。
Pandasを使用する理由
効率的なデータ操作: Pandasはデータの選択、フィルタリング、結合などを簡単に行えます
多様なデータソースへの対応: CSV、Excel、SQLデータベース、JSONなど、さまざまな形式のデータを読み込むことができます
2. Pandasの基本的なデータ構造
Pandasでは、主に以下の2つのデータ構造を使用します。
Series
1次元の配列で、インデックス付きのデータです。リストや配列のような構造で、各要素に名前(インデックス)が付けられています
例 : Series
import pandas as pd
data = [10, 20, 30, 40]
series = pd.Series(data)
print(series)
出力 : Series
0 10
1 20
2 30
3 40
dtype: int64
DataFrame
2次元のデータ構造で、行と列を持ちます。複数のSeriesが集まったような構造で、表形式のデータを扱うのに適しています
例 : DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
print(df)
#出力結果
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
3. 基本的な操作
データのインポート
CSVファイルの読み込み
df = pd.read_csv('data.csv')
Excelファイルの読み込み
df = pd.read_excel('data.xlsx', sheet_name='Sheet1', encoding='utf8')
JSONファイルの読み込み
df = pd.read_json('data.json')
tsvファイルの読み込み
df = pd.read_csv('index.tsv', sep='\t')
df = pd.read_table('index.tsv')
データの表示
データの行列数
df.shape
print(df.shape)
#行数
df.shape[0]
#列数
df.shape[1]
データの最初の数行を表示
df.head()
print(df.head()) # 最初の5行を表示
print(df.head(10)) # 最初の10行を表示
データの最後の数行を表示
print(df.tail()) # 最後の5行を表示
データの概要を表示
print(df.info()) # データの基本情報(行数、列数、型など)を表示
統計情報の表示
print(df.describe()) # 数値データの基本統計量(平均、標準偏差、最小値など)を表示
4.データの選択
Pandasでは、DataFrameやSeriesから特定の行や列を選択するために、いくつかの異なる方法が用意されています
列の選択
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# 単一の列選択
name_column = df['Name']
print(name_column)
# 複数の列選択
selected_columns = df[['Name', 'City']]
print(selected_columns)
#出力結果
0 Alice
1 Bob
2 Charlie
Name: Name, dtype: object
Name City
0 Alice New York
1 Bob Los Angeles
2 Charlie Chicago
値の抽出
iloc , loc は値を抽出するためのメソッドです。
locを用いると、列名と行名(インデックス)を指定してデータを参照します
iloc は列番号と行番号を指定してデータを参照できます
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
#loc
indexed_df = df.set_index('Name')
specific_row = indexed_df.loc['Alice']
print(specific_row)
#出力結果:loc
Age 25
City New York
Name: Alice, dtype: object
#iloc
first_row = df.iloc[0:1]
print(first_row)
#出力結果:iloc
Name Age City
0 Alice 25 New York
5. データのフィルタリング
フィルタリングは、特定の条件に基づいてデータを抽出する操作です。
条件によるフィルタリング
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
#単一条件のフィルタリング
age_filter = df['Age'] > 30
filtered_df = df[age_filter]
print(filtered_df)
#出力結果
Name Age City
2 Charlie 35 Chicago
#複数条件のフィルタリング
age_filter = (df['Age'] > 25) & (df['City'] == 'New York')
filtered_df = df[age_filter]
print(filtered_df)
#出力結果
Name Age City
0 Alice 25 New York
6.欠損値
データには欠損値(NaN)が含まれていることがよくあります。欠損値は、分析結果に影響を与えるため、適切に処理する必要があります
欠損値の確認
isnull : 要素の欠損値を判定
isnull().any(axis=) : axis=0なら列方向に欠損値を確認。axis=1なら行方向に欠損値を確認する
isnull().sum() : 列ごとの欠損値の個数を集計
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, None, 22],
'City': ['New York', None, 'Chicago', 'San Francisco']
}
df = pd.DataFrame(data)
print(df.isnull())
#出力結果
Name Age City
0 False False False
1 False False True
2 False True False
3 False False False
#列ごとの欠損値の個数の集計
print(df.isnull().sum())
#出力結果
Name 0
Age 1
City 1
dtype: int64
欠損値の削除
dropna : 欠損値の削除
df_cleaned = df.dropna()
print(df_cleaned)
欠損値を埋める
fillna : 欠損値を特定の値で埋める
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, None, 22],
'City': ['New York', None, 'Chicago', 'San Francisco']
}
df_filled = df.fillna({'Age': df['Age'].mean(), 'City': 'Unknown'})
print(df_filled)
#出力結果
Name Age City
0 Alice 25.000000 New York
1 Bob 30.000000 Unknown
2 Charlie 25.666667 Chicago
3 David 22.000000 San Francisco
重複データの処理
データセット内の重複データは、分析結果を歪める可能性があるため適切に処理する必要があります
重複行の確認と削除
duplicated() : 重複した行を抽出
drop_duplicates() : 重複した行の削除
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Alice', 'David'],
'Age': [25, 30, 25, 22],
'City': ['New York', 'Chicago', 'New York', 'San Francisco']
})
print(df.duplicated()) # 重複行を確認
df_deduplicated = df.drop_duplicates() # 重複行を削除
print(df_deduplicated)
#出力結果
0 False
1 False
2 True
3 False
dtype: bool
Name Age City
0 Alice 25 New York
1 Bob 30 Chicago
3 David 22 San Francisco
重複した行を残す
keep : 重複した行のうち残すほうを選択できます
keep='first' : 重複するデータのうち、最初に現れた行を保持します
keep ='last' : 重複するデータのうち、最後に現れた行を保持します
keep = 'False' : 重複するすべての行を削除します
df_dropped = df.drop_duplicates(keep='first')
print(df_dropped)
7. データの変形
データの構造を変形することにより、分析や可視化がしやすくなります。Pandasでは、列や行の操作、データの並び替え、集計などが可能です
行や列の追加・削除
drop : 行、列の削除
drop( , axis=) : axis=0なら行を削除。axis=1なら列を削除
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'David'],
'Age': [25, 30, 22],
'City': ['New York', 'Chicago', 'San Francisco']
})
#列の追加
df['Age in 10 Years'] = df['Age'] + 10
print(df)
#出力結果
Name Age City Age in 10 Years
0 Alice 25 New York 35
1 Bob 30 Chicago 40
3 David 22 San Francisco 32
#列の削除
df = df.drop('Age in 10 Years', axis=1)
print(df)
#出力結果
Name Age City
0 Alice 25 New York
1 Bob 30 Chicago
3 David 22 San Francisco
データの並び替え
sort_values() : 要素の値に応じて並び替える
デフォルトは昇順。降順にするには引数に'ascending=False'を追加
sort_index() : 行、列に応じて並び替える
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'David'],
'Age': [25, 30, 22],
'City': ['New York', 'Chicago', 'San Francisco']
})
#要素の値に応じて並び替え
df_sorted = df.sort_values(by='Age', ascending=False)
print(df_sorted)
#出力結果
Name Age City
1 Bob 30 Chicago
0 Alice 25 New York
3 David 22 San Francisco
8. データの集計
データのグループ化と集計
groupby( ).集計関数( ) : グループごとに統計量を集計
import pandas as pd
data = {'Category': ['A', 'B', 'A', 'B', 'C'],
'Sales': [100, 150, 200, 250, 300],
'Quantity': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)
df.groupby('Category')['Sales'].sum()
#出力結果
Category
A 300
B 400
C 300
Name: Sales, dtype: int64
この記事が気に入ったらサポートをしてみませんか?