Python pandas:データの行に対するラベル「index」について

スポンサーリンク

バイオインフォマティクスのデータ解析において、Pythonの pandas ライブラリは必須のツールです。遺伝子発現データ、配列データ、メタデータなど、大量のデータを扱う場面で強力な機能を提供してくれます。その中でも 「index(インデックス)」 は、データの整理や検索、効率的な処理を行う上で欠かせない概念です。

本記事では、pandasのindexとは何か?どのように活用できるのか? を、バイオインフォマティクスの実例を交えながら解説していきます。


1. pandasのindexとは?

pandasのindexは、データの行に対するラベル です。Excelの行番号に似ていますが、より自由度が高く、カスタマイズ可能な点が特徴です。

pandasのデータ構造には Series(1次元)と DataFrame(2次元)がありますが、どちらにもindexが存在します。

1.1 Seriesのindex

import pandas as pd

data = pd.Series([10, 20, 30], index=["A", "B", "C"])
print(data)

出力

A    10
B    20
C    30
dtype: int64

この例では、デフォルトの数値インデックス(0, 1, 2)ではなく、A, B, Cをカスタムインデックスとして設定しています。

1.2 DataFrameのindex

df = pd.DataFrame({
    "Gene": ["BRCA1", "TP53", "EGFR"],
    "Expression": [2.5, 8.1, 5.3]
}, index=["Sample1", "Sample2", "Sample3"])

print(df)

出力

         Gene  Expression
Sample1  BRCA1        2.5
Sample2   TP53        8.1
Sample3   EGFR        5.3

このように、各サンプル(Sample1, Sample2, Sample3)をindexとして設定できます。遺伝子発現データを扱う際には、サンプルIDや遺伝子名をindexにすることで、データの検索や操作がしやすくなります。


2. indexの設定と操作

pandasのindexは、以下のように操作できます。

2.1 indexの設定

データフレームの作成時に、特定の列をindexにすることも可能です。

df = pd.DataFrame({
    "Sample": ["S1", "S2", "S3"],
    "Gene": ["BRCA1", "TP53", "EGFR"],
    "Expression": [2.5, 8.1, 5.3]
})

df.set_index("Sample", inplace=True)
print(df)

出力

       Gene  Expression
Sample                 
S1     BRCA1        2.5
S2      TP53        8.1
S3      EGFR        5.3

set_index("Sample") によって、Sample列がindexになり、より意味のあるデータ構造になりました。


2.2 indexをリセットする

indexを通常の列に戻すには、reset_index() を使います。

df.reset_index(inplace=True)
print(df)

出力

  Sample   Gene  Expression
0     S1  BRCA1        2.5
1     S2   TP53        8.1
2     S3   EGFR        5.3

このように、indexを解除し、通常の列として扱うことができます。


2.3 indexを使ったデータの選択

indexを指定してデータを取得することもできます。

print(df.loc["S2"])

出力

Gene          TP53
Expression     8.1
Name: S2, dtype: object

このように、df.loc["S2"]Sample が “S2” の行を取得できます。


3. indexのユニーク性と重複

通常、indexはユニークであることが望ましいですが、重複したindex を持つことも可能です。

df = pd.DataFrame({
    "Gene": ["BRCA1", "TP53", "EGFR", "TP53"],
    "Expression": [2.5, 8.1, 5.3, 7.9]
}, index=["Sample1", "Sample2", "Sample3", "Sample2"])

print(df)

出力

         Gene  Expression
Sample1  BRCA1        2.5
Sample2   TP53        8.1
Sample3   EGFR        5.3
Sample2   TP53        7.9

このように、Sample2 が重複しています。これにより、df.loc["Sample2"] は複数の行を返します。


4. indexの活用例(バイオインフォマティクス)

バイオインフォマティクスでは、pandasのindexを活用して遺伝子発現データや変異データを効率的に扱えます。

4.1 遺伝子発現データのフィルタリング

例えば、「特定の遺伝子の発現値が一定以上のサンプルを抽出する」場合:

df = pd.DataFrame({
    "Gene": ["BRCA1", "TP53", "EGFR", "MYC"],
    "Sample1": [2.5, 8.1, 5.3, 6.2],
    "Sample2": [1.2, 7.9, 4.8, 5.6],
    "Sample3": [3.1, 8.5, 6.1, 7.0]
})

df.set_index("Gene", inplace=True)
filtered_df = df[df["Sample1"] > 3.0]
print(filtered_df)

出力

       Sample1  Sample2  Sample3
Gene                              
TP53      8.1      7.9      8.5
EGFR      5.3      4.8      6.1
MYC       6.2      5.6      7.0

このように、indexを遺伝子名にすることで、df.loc["BRCA1"] のように特定の遺伝子を簡単に取り出したり、条件を指定してデータを抽出できます。


5. まとめ

pandasのindexは、バイオインフォマティクスにおいてデータの整理や解析をスムーズにする重要な機能です。

  • indexはデータの「行ラベル」であり、検索や操作を効率化する。
  • set_index() で特定の列をindexに設定できる。
  • loc[] を使ってindexをキーにデータを取得できる。
  • バイオインフォマティクスでは、遺伝子名やサンプルIDをindexに設定することで、効率的なデータ処理が可能になる。

pandasのindexを適切に活用することで、大規模なデータ解析をより直感的かつ高速に行えるようになります!!

ぜひ、実際のデータで試してみてくださいね〜!

タイトルとURLをコピーしました