この記事では、Python のデータ分析ライブラリ pandas を使用して TSV ファイルを読み込み、データフレームとして扱う方法を解説します。TSV ファイルはタブ区切り形式のテキストファイルで、データベースやスプレッドシートのデータ交換によく利用されます。
pandas とは
pandas は、データ分析や操作を効率的に行うための Python ライブラリです。表形式のデータを扱うデータフレームというデータ構造を中心に、データの読み込み、加工、集計、可視化などの機能を提供します。
前提条件
- Python 3.x がインストールされていること
- pandas ライブラリがインストールされていること
pandas がインストールされていない場合は、下記のコマンドでインストールしてください。
pip install pandas
基本的な TSV ファイルの読み込み
最も基本的な TSV ファイルの読み込みは、pandas.read_csv() 関数を使用し、区切り文字としてタブ \t を指定します。
1. pandas のインポート
import pandas as pd
データ分析を行う準備として pandas ライブラリをインポートします。
2. TSV ファイルの読み込み
df = pd.read_csv('data.tsv', sep='\t')
read_csv() 関数の第一引数にファイルパスを指定し、sep 引数にタブ文字 \t を指定します。読み込んだデータは df という名前のデータフレームに格納されます。delimiter='\t' としても同じ結果が得られます。
read_csv()関数は、デフォルトでは区切り文字がカンマ (,) になっています。TSV ファイルの場合は必ずタブ区切りを指定します。
サンプルコード
以下のような内容の data.tsv ファイルを例に、データの読み込みと同時に内容を確認します。
サンプルデータ(data.tsv)
name age gender Alice 20 Female Bob 25 Male Charlie 30 Male
列名(ヘッダー)は、name,age,genderです。
サンプルコード
import pandas as pd # TSVファイルを読み込む df = pd.read_csv('data.tsv', sep='\t') # 最初の5行を表示 print(df.head()) # データフレームの情報を表示 print(df.info())
df.head() でデータフレームの先頭部分(デフォルトでは5行)を表示し、df.info() で各列のデータ型や欠損値の有無などの情報を確認できます。
出力例
name age gender 0 Alice 20 Female 1 Bob 25 Male 2 Charlie 30 Male <class 'pandas.core.frame.DataFrame'> RangeIndex: 3 entries, 0 to 2 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 name 3 non-null object 1 age 3 non-null int64 2 gender 3 non-null object dtypes: int64(1), object(2) memory usage: 200.0+ bytes None
応用: 様々な形式のTSVファイルの読み込み
read_csv() 関数は、様々なオプションを指定することで、より複雑な形式の TSV ファイルにも対応できます。
ヘッダーがない場合
ヘッダー行がない TSV ファイルの場合は、header=None を指定します。列には自動的に0から始まる連番が付与されます。
import pandas as pd df = pd.read_csv('no_header.tsv', sep='\t', header=None) print(df)
列名を指定したい場合
ヘッダーがないファイルに列名を与えたい場合は、names オプションで列名のリストを指定します。
import pandas as pd df = pd.read_csv('no_header.tsv', sep='\t', header=None, names=['ID', 'Name', 'Score']) print(df)
特定の列だけを読み込む
usecols オプションで、読み込む列をリストまたは列番号で指定できます。
import pandas as pd # 列名で指定 df = pd.read_csv('data.tsv', sep='\t', usecols=['name', 'age']) #列番号で指定 df = pd.read_csv('data.tsv', sep='\t', usecols=[0, 1]) print(df)
読み飛ばす行を指定する
skiprows オプションを使用すると、ファイルの先頭から指定した行数だけ読み飛ばすことができます。
コメント行がある場合や、データの開始位置がファイル先頭でない場合に便利です。
import pandas as pd # 先頭の2行をスキップ df = pd.read_csv('data_with_comments.tsv', sep='\t', skiprows=2) print(df)
読み込む行数を制限する
nrowsオプションを使用すると指定した行数だけ読み込みます。
大きなファイルを扱う際に、試しに一部だけを読み込んで処理を試す場合などに有用です。
import pandas as pd # 先頭の100行だけ読み込み df = pd.read_csv('large_data.tsv', sep='\t', nrows=100) print(len(df))
Pandas read_csv()の主要なパラメータ
| オプション | 説明 |
|---|---|
sep |
区切り文字を指定します。TSV ファイルの場合は \t (タブ) を指定します。 |
header |
ヘッダー行の指定。None でヘッダーなし、整数でヘッダー行のインデックスを指定します。デフォルトは infer (自動判別) です。 |
names |
列名のリストを指定します。header=None と共に使用します。 |
usecols |
読み込む列をリストまたは列番号で指定します。 |
skiprows |
ファイルの先頭から読み飛ばす行数を指定します。 |
nrows |
読み込む行数を指定します。 |
dtype |
列ごとにデータ型を指定できます。 例:dtype={'age': int, 'gender': str} |
Pandasのread_csv()については下記の記事でより詳しく解説しています。
より詳細な情報は pandas の公式ドキュメントを参照してください。
pandas.read_csv — pandas 公式ドキュメント
[PR]