[Python] Pandas – DataFrameの基本的な使い方を解説
PandasのDataFrameは、Pythonでデータを扱う際に非常に便利な2次元のデータ構造です。
行と列で構成され、Excelの表のようにデータを操作できます。
DataFrameはpd.DataFrame()
で作成し、リストや辞書、NumPy配列などから生成可能です。
データの読み込みにはpd.read_csv()
などが使われ、データの表示にはdf.head()
やdf.tail()
が便利です。
列の選択はdf['列名']
、行の選択はdf.loc[]
やdf.iloc[]
で行います。
DataFrameとは
PandasのDataFrameは、2次元のラベル付きデータ構造で、異なるデータ型を持つ列を持つことができます。
行と列のインデックスを持ち、データの操作や分析を効率的に行うための強力なツールです。
データの整形、集計、フィルタリングなど、さまざまな操作が簡単に行えます。
DataFrameの基本構造
DataFrameは、以下のような基本構造を持っています。
構成要素 | 説明 |
---|---|
行 | データの各エントリを表す。インデックスで識別される。 |
列 | データの属性を表す。各列は異なるデータ型を持つことができる。 |
インデックス | 行を識別するためのラベル。デフォルトでは0から始まる整数が使用される。 |
DataFrameは、リスト、辞書、NumPy配列などから作成することができます。
Seriesとの違い
Seriesは、Pandasのもう一つの基本的なデータ構造で、1次元のラベル付き配列です。
DataFrameは、複数のSeriesを持つことができ、各Seriesが列を形成します。
以下に、SeriesとDataFrameの違いを示します。
特徴 | Series | DataFrame |
---|---|---|
次元 | 1次元 | 2次元 |
構造 | 単一のデータ列 | 複数のデータ列 |
インデックス | ラベル付きインデックス | 行と列の両方にインデックス |
Seriesは、単一のデータ列を扱う場合に便利であり、DataFrameは複数のデータ列を同時に扱う場合に適しています。
DataFrameの作成方法
DataFrameは、さまざまな方法で作成できます。
以下に、いくつかの一般的な方法を示します。
- リストからの作成
import pandas as pd
data = [[1, 'Alice'], [2, 'Bob'], [3, 'Charlie']]
df = pd.DataFrame(data, columns=['ID', 'Name'])
print(df)
ID Name
0 1 Alice
1 2 Bob
2 3 Charlie
- 辞書からの作成
import pandas as pd
data = {
'ID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie']
}
df = pd.DataFrame(data)
print(df)
ID Name
0 1 Alice
1 2 Bob
2 3 Charlie
- NumPy配列からの作成
import pandas as pd
import numpy as np
data = np.array([[1, 'Alice'], [2, 'Bob'], [3, 'Charlie']])
df = pd.DataFrame(data, columns=['ID', 'Name'])
print(df)
ID Name
0 1 Alice
1 2 Bob
2 3 Charlie
- CSVファイルからの読み込み
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
出力結果はファイルの内容によります。
- Excelファイルからの読み込み
import pandas as pd
df = pd.read_excel('data.xlsx')
print(df)
出力結果はファイルの内容によります。
これらの方法を使って、さまざまな形式のデータを簡単にDataFrameに変換することができます。
DataFrameの作成方法
PandasのDataFrameは、さまざまなデータソースから簡単に作成できます。
以下に、一般的な作成方法を詳しく解説します。
リストからの作成
リストを使用してDataFrameを作成することができます。
リストの各要素は、DataFrameの行を表します。
import pandas as pd
data = [[1, 'Alice'], [2, 'Bob'], [3, 'Charlie']]
df = pd.DataFrame(data, columns=['ID', 'Name'])
print(df)
ID Name
0 1 Alice
1 2 Bob
2 3 Charlie
この例では、リストの各サブリストが1行を構成し、columns
引数で列名を指定しています。
辞書からの作成
辞書を使用してDataFrameを作成することも可能です。
辞書のキーが列名、値が列のデータになります。
import pandas as pd
data = {
'ID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie']
}
df = pd.DataFrame(data)
print(df)
ID Name
0 1 Alice
1 2 Bob
2 3 Charlie
この方法では、各キーが列名として使用され、対応するリストがその列のデータになります。
NumPy配列からの作成
NumPy配列を使用してDataFrameを作成することもできます。
NumPy配列は、数値データを効率的に扱うための強力なツールです。
import pandas as pd
import numpy as np
data = np.array([[1, 'Alice'], [2, 'Bob'], [3, 'Charlie']])
df = pd.DataFrame(data, columns=['ID', 'Name'])
print(df)
ID Name
0 1 Alice
1 2 Bob
2 3 Charlie
NumPy配列を使用することで、数値データと文字列データを混在させたDataFrameを作成できます。
CSVファイルからの読み込み
CSVファイルからDataFrameを作成することも非常に一般的です。
read_csv()関数
を使用して、CSVファイルを簡単に読み込むことができます。
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
出力結果はファイルの内容によります。
CSVファイルには、カンマ区切りでデータが保存されており、最初の行が列名として使用されます。
Excelファイルからの読み込み
ExcelファイルからDataFrameを作成することも可能です。
read_excel()関数
を使用して、Excelファイルを読み込むことができます。
import pandas as pd
df = pd.read_excel('data.xlsx')
print(df)
出力結果はファイルの内容によります。
Excelファイルの最初のシートがデフォルトで読み込まれ、列名は最初の行から取得されます。
これらの方法を使うことで、さまざまな形式のデータを簡単にDataFrameに変換し、データ分析や処理を行うことができます。
DataFrameの基本操作
PandasのDataFrameを使うことで、データの表示、選択、フィルタリング、追加・削除などの基本操作を簡単に行うことができます。
以下に、これらの操作について詳しく解説します。
データの表示
DataFrameの内容を確認するための基本的なメソッドがあります。
head()とtail()の使い方
head()メソッド
は、DataFrameの最初の数行を表示します。
デフォルトでは5行が表示されますが、引数で表示する行数を指定できます。
import pandas as pd
data = {
'ID': [1, 2, 3, 4, 5],
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva']
}
df = pd.DataFrame(data)
# 最初の3行を表示
print(df.head(3))
ID Name
0 1 Alice
1 2 Bob
2 3 Charlie
tail()メソッド
は、DataFrameの最後の数行を表示します。
こちらも引数で表示する行数を指定できます。
# 最後の2行を表示
print(df.tail(2))
ID Name
3 4 David
4 5 Eva
info()とdescribe()の使い方
info()メソッド
は、DataFrameの概要を表示します。
データ型や欠損値の数などの情報が得られます。
# DataFrameの情報を表示
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ID 5 non-null int64
1 Name 5 non-null object
dtypes: int64(1), object(1)
memory usage: 120.0+ bytes
describe()メソッド
は、数値データの統計情報を表示します。
平均値、標準偏差、最小値、最大値などが得られます。
# 統計情報を表示
print(df.describe())
ID
count 5.000000
mean 3.000000
std 1.581139
min 1.000000
25% 2.000000
50% 3.000000
75% 4.000000
max 5.000000
列の選択
DataFrameから特定の列を選択する方法を見ていきます。
列名での選択
列名を指定して単一の列を選択することができます。
# 'Name'列を選択
name_column = df['Name']
print(name_column)
0 Alice
1 Bob
2 Charlie
3 David
4 Eva
Name: Name, dtype: object
複数列の選択
複数の列を選択する場合は、リストを使います。
# 'ID'と'Name'列を選択
selected_columns = df[['ID', 'Name']]
print(selected_columns)
ID Name
0 1 Alice
1 2 Bob
2 3 Charlie
3 4 David
4 5 Eva
行の選択
行を選択する方法には、loc[]
とiloc[]
があります。
loc[]によるラベル指定
loc[]
を使うと、行ラベルを指定して行を選択できます。
# ラベル0の行を選択
row_0 = df.loc[0]
print(row_0)
ID 1
Name Alice
Name: 0, dtype: object
iloc[]によるインデックス指定
iloc[]
を使うと、行インデックスを指定して行を選択できます。
# インデックス1の行を選択
row_1 = df.iloc[1]
print(row_1)
ID 2
Name Bob
Name: 1, dtype: object
データのフィルタリング
特定の条件に基づいてデータをフィルタリングする方法を見ていきます。
条件式によるフィルタリング
条件式を使って、特定の条件を満たす行を選択できます。
# IDが3以上の行を選択
filtered_df = df[df['ID'] >= 3]
print(filtered_df)
ID Name
2 3 Charlie
3 4 David
4 5 Eva
複数条件の組み合わせ
複数の条件を組み合わせてフィルタリングすることも可能です。
# IDが2以上かつNameが'Bob'でない行を選択
filtered_df = df[(df['ID'] >= 2) & (df['Name'] != 'Bob')]
print(filtered_df)
ID Name
2 3 Charlie
3 4 David
4 5 Eva
データの追加・削除
DataFrameにデータを追加したり削除したりする方法を見ていきます。
列の追加
新しい列を追加するには、列名を指定して値を代入します。
# 'Age'列を追加
df['Age'] = [25, 30, 35, 40, 45]
print(df)
ID Name Age
0 1 Alice 25
1 2 Bob 30
2 3 Charlie 35
3 4 David 40
4 5 Eva 45
行の追加
新しい行を追加するには、loc[]
を使って新しいインデックスを指定します。
# 新しい行を追加
df.loc[5] = [6, 'Frank', 50]
print(df)
ID Name Age
0 1 Alice 25
1 2 Bob 30
2 3 Charlie 35
3 4 David 40
4 5 Eva 45
5 6 Frank 50
列の削除
列を削除するには、drop()メソッド
を使用します。
# 'Age'列を削除
df = df.drop(columns=['Age'])
print(df)
ID Name
0 1 Alice
1 2 Bob
2 3 Charlie
3 4 David
4 5 Eva
5 6 Frank
行の削除
行を削除する場合も、drop()メソッド
を使用します。
# インデックス1の行を削除
df = df.drop(index=1)
print(df)
ID Name
0 1 Alice
2 3 Charlie
3 4 David
4 5 Eva
5 6 Frank
これらの基本操作を使うことで、DataFrameのデータを効率的に操作し、分析を行うことができます。
データの集計と変形
Pandasを使用すると、データの集計や変形を簡単に行うことができます。
以下に、グループ化、ピボットテーブルの作成、データのソート、欠損値の処理について詳しく解説します。
グループ化と集計
データをグループ化して集計することで、特定の条件に基づいた分析が可能になります。
groupby()の使い方
groupby()メソッド
を使用して、特定の列に基づいてデータをグループ化します。
import pandas as pd
data = {
'ID': [1, 2, 3, 4, 5, 6],
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva', 'Frank'],
'Score': [85, 90, 95, 80, 70, 90],
'Class': ['A', 'A', 'B', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
# 'Class'でグループ化し、数値データのみを選択
grouped = df.groupby('Class')[['ID', 'Score']].mean()
print(grouped)
ID Score
Class
A 2.666667 81.666667
B 4.333333 88.333333
この例では、Class
列に基づいてデータをグループ化し、各クラスのIDとScoreの平均を計算しています。
集計関数の適用
グループ化したデータに対して、さまざまな集計関数を適用できます。
# 各クラスのScoreの合計を計算
total_score = grouped['Score'].sum()
print(total_score)
Class
A 265
B 285
Name: Score, dtype: int64
この例では、各クラスのScoreの合計を計算しています。
ピボットテーブルの作成
ピボットテーブルを使用すると、データをより視覚的に整理できます。
pivot_table()の使い方
pivot_table()メソッド
を使用して、データをピボットテーブル形式に変換します。
# ピボットテーブルの作成
pivot_table = pd.pivot_table(df, values='Score', index='Class', aggfunc='mean')
print(pivot_table)
Score
Class
A 81.666667
B 88.333333
この例では、Class
をインデックスにして、Scoreの平均を計算したピボットテーブルを作成しています。
ピボットテーブルの応用例
ピボットテーブルは、複数の集計関数を同時に適用することも可能です。
# 複数の集計関数を適用
pivot_table_multi = pd.pivot_table(df, values='Score', index='Class', aggfunc=[min, max, 'mean'])
print(pivot_table_multi)
min max mean
Class
A 70.0 90.0 81.666667
B 80.0 95.0 88.333333
この例では、各クラスのScoreの最小値、最大値、平均値を計算したピボットテーブルを作成しています。
データのソート
データをソートすることで、特定の順序で表示することができます。
行・列のソート
sort_values()メソッド
を使用して、特定の列に基づいて行をソートできます。
# Scoreで行をソート
sorted_df = df.sort_values(by='Score', ascending=False)
print(sorted_df)
ID Name Score Class
2 3 Charlie 95 B
1 2 Bob 90 A
5 6 Frank 90 B
0 1 Alice 85 A
3 4 David 80 B
4 5 Eva 70 A
この例では、Scoreの降順で行をソートしています。
複数列でのソート
複数の列を指定してソートすることも可能です。
# Classで昇順、Scoreで降順にソート
sorted_multi = df.sort_values(by=['Class', 'Score'], ascending=[True, False])
print(sorted_multi)
ID Name Score Class
0 1 Alice 85 A
1 2 Bob 90 A
4 5 Eva 70 A
3 4 David 80 B
2 3 Charlie 95 B
5 6 Frank 90 B
この例では、Classで昇順、Scoreで降順にソートしています。
欠損値の処理
データに欠損値が含まれている場合、適切に処理することが重要です。
欠損値の確認
isnull()メソッド
を使用して、欠損値を確認できます。
# 欠損値の確認
missing_values = df.isnull().sum()
print(missing_values)
ID 0
Name 0
Score 0
Class 0
dtype: int64
この例では、各列の欠損値の数を表示しています。
欠損値の削除
欠損値を含む行を削除するには、dropna()メソッド
を使用します。
# 欠損値を含む行を削除
df_cleaned = df.dropna()
print(df_cleaned)
出力結果は、欠損値が削除されたDataFrameになります。
欠損値の補完
欠損値を特定の値で補完するには、fillna()メソッド
を使用します。
# 欠損値を0で補完
df_filled = df.fillna(0)
print(df_filled)
出力結果は、欠損値が0で補完されたDataFrameになります。
これらの操作を通じて、データの集計や変形を行い、分析に役立てることができます。
データの結合と結合操作
Pandasを使用すると、複数のDataFrameを結合することができます。
これにより、異なるデータソースを統合し、分析を行うことが可能になります。
以下に、データの結合方法について詳しく解説します。
concat()による結合
concat()メソッド
を使用すると、複数のDataFrameを縦または横に結合することができます。
import pandas as pd
# 2つのDataFrameを作成
df1 = pd.DataFrame({
'ID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie']
})
df2 = pd.DataFrame({
'ID': [4, 5, 6],
'Name': ['David', 'Eva', 'Frank']
})
# 縦に結合
concat_df = pd.concat([df1, df2], axis=0)
print(concat_df)
ID Name
0 1 Alice
1 2 Bob
2 3 Charlie
0 4 David
1 5 Eva
2 6 Frank
この例では、axis=0
を指定することで、DataFrameを縦に結合しています。
axis=1
を指定すると、横に結合されます。
merge()による結合
merge()メソッド
を使用すると、SQLのJOIN操作のように、共通の列に基づいてDataFrameを結合できます。
# 2つのDataFrameを作成
df1 = pd.DataFrame({
'ID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie']
})
df2 = pd.DataFrame({
'ID': [2, 3, 4],
'Score': [90, 95, 80]
})
# ID列を基に結合
merged_df = pd.merge(df1, df2, on='ID', how='inner')
print(merged_df)
ID Name Score
0 2 Bob 90
1 3 Charlie 95
この例では、on='ID'
でID列を基に結合し、how='inner'
で内部結合を行っています。
他にも、how
引数にはleft
、right
、outer
などのオプションがあります。
インデックスのリセットと設定
結合後にインデックスをリセットすることができます。
reset_index()メソッド
を使用します。
# インデックスをリセット
reset_df = merged_df.reset_index(drop=True)
print(reset_df)
ID Name Score
0 2 Bob 90
1 3 Charlie 95
drop=True
を指定することで、元のインデックスを削除します。
また、特定の列をインデックスとして設定するには、set_index()メソッド
を使用します。
# ID列をインデックスに設定
set_index_df = merged_df.set_index('ID')
print(set_index_df)
Name Score
ID
2 Bob 90
3 Charlie 95
結合時の注意点
データを結合する際には、いくつかの注意点があります。
- 重複した列名: 結合するDataFrameに同じ列名がある場合、
merge()メソッド
は自動的に接尾辞を追加します。
接尾辞を変更するには、suffixes
引数を使用します。
merged_df = pd.merge(df1, df2, on='ID', how='inner', suffixes=('_left', '_right'))
- 欠損値の処理: 結合後に欠損値が発生することがあります。
必要に応じて、fillna()メソッド
を使用して欠損値を補完することが重要です。
- データ型の一致: 結合する列のデータ型が一致していることを確認してください。
異なるデータ型の場合、結合が正しく行われないことがあります。
これらのポイントに注意しながら、データの結合を行うことで、より効果的なデータ分析が可能になります。
データの可視化
データの可視化は、データ分析において非常に重要なステップです。
Pandasを使用すると、簡単にデータをプロットすることができます。
以下に、Pandasでのプロット方法、MatplotlibやSeabornとの連携について詳しく解説します。
Pandasでの簡単なプロット
Pandasは、データフレームのデータを簡単に可視化するためのplot()メソッド
を提供しています。
plot()の使い方
plot()メソッド
を使用すると、DataFrameやSeriesのデータを簡単にプロットできます。
デフォルトでは、折れ線グラフが描画されます。
import pandas as pd
import matplotlib.pyplot as plt
# サンプルデータの作成
data = {
'Year': [2018, 2019, 2020, 2021, 2022],
'Sales': [150, 200, 250, 300, 350]
}
df = pd.DataFrame(data)
# 折れ線グラフの作成
df.plot(x='Year', y='Sales', title='Sales Over Years')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.show()
出力結果は、年ごとの売上を示す折れ線グラフになります。
グラフの種類とオプション
plot()メソッド
では、さまざまな種類のグラフを描画することができます。
kind
引数を使用して、グラフの種類を指定します。
# 棒グラフの作成
df.plot(x='Year', y='Sales', kind='bar', title='Sales Over Years')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.show()
出力結果は、年ごとの売上を示す棒グラフになります。
利用可能なグラフの種類には、以下のようなものがあります。
グラフの種類 | 説明 |
---|---|
line | 折れ線グラフ |
bar | 棒グラフ |
barh | 横棒グラフ |
hist | ヒストグラム |
box | 箱ひげ図 |
scatter | 散布図 |
pie | 円グラフ |
Matplotlibとの連携
Pandasのプロット機能は、Matplotlibを基盤としているため、Matplotlibの機能を活用してグラフをカスタマイズすることができます。
# 散布図の作成
df.plot(x='Year', y='Sales', kind='scatter', title='Sales Scatter Plot')
plt.title('Sales Scatter Plot')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.grid()
plt.show()
この例では、散布図を作成し、グリッドを追加しています。
Matplotlibの機能を使用することで、タイトルやラベル、グリッドなどを自由にカスタマイズできます。
Seabornとの連携
Seabornは、Matplotlibを基盤としたデータ可視化ライブラリで、より美しいグラフを簡単に作成することができます。
PandasのDataFrameと連携して使用することができます。
import seaborn as sns
# Seabornのスタイルを設定
sns.set(style='whitegrid')
# Seabornを使用した棒グラフの作成
sns.barplot(x='Year', y='Sales', data=df)
plt.title('Sales Over Years')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.show()
この例では、Seabornを使用して年ごとの売上を示す棒グラフを作成しています。
Seabornは、デフォルトで美しいスタイルを提供し、簡単に魅力的なグラフを作成できます。
これらの方法を使用することで、Pandasを使ったデータの可視化が簡単に行え、データ分析の結果を視覚的に表現することができます。
応用例
Pandasは、さまざまなデータ処理のニーズに応じて柔軟に対応できる強力なライブラリです。
以下に、Pandasを使用した応用例をいくつか紹介します。
大規模データの処理
Pandasは、大規模なデータセットを効率的に処理するための機能を提供しています。
chunksize
引数を使用して、CSVファイルを部分的に読み込むことができます。
import pandas as pd
# 大規模なCSVファイルを部分的に読み込む
chunk_size = 10000 # 1回に読み込む行数
for chunk in pd.read_csv('large_data.csv', chunksize=chunk_size):
# 各チャンクに対して処理を行う
print(chunk.head())
この方法を使用することで、メモリに収まりきらない大規模データを効率的に処理できます。
時系列データの操作
Pandasは、時系列データの操作に特化した機能を提供しています。
to_datetime()メソッド
を使用して、日付データをDatetime型
に変換できます。
# サンプルデータの作成
data = {
'Date': ['2022-01-01', '2022-01-02', '2022-01-03'],
'Sales': [100, 150, 200]
}
df = pd.DataFrame(data)
# 日付をDatetime型に変換
df['Date'] = pd.to_datetime(df['Date'])
# 日付をインデックスに設定
df.set_index('Date', inplace=True)
# 日付ごとの売上を表示
print(df)
Sales
Date
2022-01-01 100
2022-01-02 150
2022-01-03 200
時系列データに対して、リサンプリングや移動平均などの操作を行うこともできます。
# 1日ごとの売上の合計を計算
daily_sales = df.resample('D').sum()
print(daily_sales)
カテゴリデータの処理
Pandasは、カテゴリデータを効率的に処理するための機能を提供しています。
Categorical型
を使用することで、メモリの使用量を削減し、処理速度を向上させることができます。
# サンプルデータの作成
data = {
'Category': ['A', 'B', 'A', 'C', 'B', 'A'],
'Values': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)
# カテゴリ型に変換
df['Category'] = df['Category'].astype('category')
# カテゴリごとの集計
category_summary = df.groupby('Category')['Values'].sum()
print(category_summary)
Category
A 100
B 70
C 40
Name: Values, dtype: int64
このように、カテゴリデータを使用することで、データの集計や分析が効率的に行えます。
データの正規化と標準化
データの正規化や標準化は、機械学習やデータ分析において重要な前処理ステップです。
Pandasを使用して、データを簡単に正規化または標準化できます。
正規化
正規化は、データを特定の範囲にスケーリングするプロセスです。
以下の例では、Min-Maxスケーリングを使用してデータを0から1の範囲に正規化します。
# サンプルデータの作成
data = {
'Values': [10, 20, 30, 40, 50]
}
df = pd.DataFrame(data)
# Min-Maxスケーリング
df['Normalized'] = (df['Values'] - df['Values'].min()) / (df['Values'].max() - df['Values'].min())
print(df)
Values Normalized
0 10 0.00
1 20 0.25
2 30 0.50
3 40 0.75
4 50 1.00
標準化
標準化は、データを平均0、標準偏差1にスケーリングするプロセスです。
以下の例では、Zスコアを使用してデータを標準化します。
# Zスコア標準化
df['Standardized'] = (df['Values'] - df['Values'].mean()) / df['Values'].std()
print(df)
Category Values Standardized
0 A 10 -1.336306
1 B 20 -0.801784
2 A 30 -0.267261
3 C 40 0.267261
4 B 50 0.801784
5 A 60 1.336306
これらの手法を使用することで、データの前処理を行い、機械学習モデルの性能を向上させることができます。
Pandasを活用することで、さまざまなデータ処理のニーズに対応できる柔軟性を持っています。
まとめ
この記事では、Pandasを使用したDataFrameの基本的な使い方から、データの集計、可視化、結合、さらには応用例に至るまで、幅広い操作方法を紹介しました。
これにより、データ分析や処理を行う際の具体的な手法やテクニックを理解することができるでしょう。
今後は、実際のデータセットを使ってこれらの操作を試し、Pandasの機能を活用してデータ分析のスキルを向上させてみてください。