見出し画像

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





この記事が気に入ったらサポートをしてみませんか?