PandasでCSV/TSVファイルを読み込む:read_csvとread_tableを徹底解説! 📥


 

データ分析の最初のステップは、多くの場合、外部ファイルからのデータ読み込みです。特に、**CSV(Comma Separated Values)TSV(Tab Separated Values)**といったテキストファイル形式は、データのやり取りで非常に頻繁に使われます。Pandasでは、これらのファイルを効率的かつ柔軟に読み込むための強力な関数、read_csv()read_table()が提供されています。

この記事では、PandasでCSV/TSVファイルを読み込む基本から、よく使うオプション、そして両関数の使い分けまでを詳しく解説します。


 

pd.read_csv():CSVファイル読み込みの標準 🌟

 

pd.read_csv()は、カンマ区切りのCSVファイルを読み込むためのPandasの主要な関数です。非常に多くのオプションがあり、様々な形式のCSVファイルに対応できます。

 

基本的な使い方

 

最もシンプルな使い方は、ファイルパスを指定するだけです。

Python
 
import pandas as pd
import io # サンプルデータ作成用

# サンプルCSVデータを文字列として準備
csv_data = """id,name,age
1,Alice,25
2,Bob,30
3,Charlie,35
"""

# StringIOを使って文字列からDataFrameを読み込み
df_csv = pd.read_csv(io.StringIO(csv_data))
print("--- 基本的なCSV読み込み ---")
print(df_csv)

# 実際のファイルから読み込む場合は以下のようにパスを指定します
# df_csv = pd.read_csv('your_data.csv')

 

よく使うオプション

 

 

1. sep / delimiter:区切り文字の指定

 

CSVファイルがカンマ以外で区切られている場合(例: セミコロン、タブ)、sepまたはdelimiterオプションで区切り文字を指定します。

Python
 
import pandas as pd
import io

# セミコロン区切りのCSVデータ
semicolon_csv = """id;product;price
1;apple;100
2;banana;150
"""
df_semicolon = pd.read_csv(io.StringIO(semicolon_csv), sep=';')
print("\n--- セミコロン区切りのCSV読み込み ---")
print(df_semicolon)

 

2. header:ヘッダー行の指定

 

データにヘッダー行がない場合や、特定の行をヘッダーとして使いたい場合に指定します。header=Noneとすると、ヘッダーなしで0から始まる整数が列名になります。

Python
 
import pandas as pd
import io

# ヘッダーなしのCSVデータ
no_header_csv = """1,Alice,25
2,Bob,30
"""
df_no_header = pd.read_csv(io.StringIO(no_header_csv), header=None)
print("\n--- ヘッダーなしのCSV読み込み ---")
print(df_no_header)

# 特定の行をヘッダーにする場合 (例: 2行目をヘッダーに)
# df_header_row = pd.read_csv('your_data.csv', header=1) # 0始まりのインデックス

 

3. names:列名の指定

 

header=Noneで読み込んだ後や、既存のヘッダーを上書きしたい場合に、namesオプションで列名のリストを指定できます。

Python
 
import pandas as pd
import io

no_header_csv = """1,Alice,25
2,Bob,30
"""
df_custom_names = pd.read_csv(io.StringIO(no_header_csv), header=None, names=['ユーザーID', '氏名', '年齢'])
print("\n--- 列名を指定してCSV読み込み ---")
print(df_custom_names)

 

4. dtype:データ型の指定

 

特定の列を特定のデータ型で読み込みたい場合にdtypeオプションを使用します。これにより、メモリ効率が向上したり、後の処理がスムーズになります。

Python
 
import pandas as pd
import io

data_with_types = """id,value
1,10.5
2,20.0
"""
# 'id'をint32、'value'をfloat32で読み込む
df_typed = pd.read_csv(io.StringIO(data_with_types), dtype={'id': 'int32', 'value': 'float32'})
print("\n--- データ型を指定してCSV読み込み ---")
print(df_typed.dtypes)

 

5. encoding:文字コードの指定

 

日本語のCSVファイルなどで文字化けが発生する場合、encodingオプションで適切な文字コード(例: 'shift_jis', 'utf-8')を指定します。

Python
 
# 例: shift_jisでエンコードされたファイルを読み込む場合
# df_encoded = pd.read_csv('japanese_data.csv', encoding='shift_jis')

 

6. skiprows:特定の行のスキップ

 

ファイルの冒頭にコメント行や不要な情報がある場合、skiprowsでスキップする行数を指定できます。

Python
 
import pandas as pd
import io

commented_csv = """# This is a comment
# Data starts below
id,value
1,100
2,200
"""
df_skipped = pd.read_csv(io.StringIO(commented_csv), skiprows=2)
print("\n--- 特定の行をスキップしてCSV読み込み ---")
print(df_skipped)

 

pd.read_table():タブ区切りファイル(TSV)に特化 📝

 

pd.read_table()は、主にタブ区切りのファイルを読み込むために使われます。内部的にはpd.read_csv(sep='\t', ...)と同じ機能を持っています。

 

基本的な使い方

 

タブ区切りのファイルの場合、read_table()を使うとsep='\t'を明示的に指定する必要がなくなります。

Python
 
import pandas as pd
import io

# サンプルTSVデータを文字列として準備
tsv_data = """item\tquantity\tstatus
pen\t10\tin_stock
book\t5\tout_of_stock
"""

# StringIOを使って文字列からDataFrameを読み込み
df_tsv = pd.read_table(io.StringIO(tsv_data))
print("\n--- 基本的なTSV読み込み ---")
print(df_tsv)

# 実際のファイルから読み込む場合は以下のようにパスを指定します
# df_tsv = pd.read_table('your_data.tsv')

 

read_table()read_csv()の使い分け

 

  • read_csv(): カンマ区切りのCSVファイルを読み込む際にデフォルトで使用します。他の区切り文字を使う場合はsepオプションで明示的に指定します。

  • read_table(): タブ区切りのTSVファイルを読み込む際に便利です。sep='\t'を省略できるため、コードが簡潔になります。

実務ではread_csv()を使い、sepオプションで区切り文字を柔軟に指定するケースが多いです。read_table()は、タブ区切りが明らかな場合に簡潔に記述するためのショートカットと考えると良いでしょう。


 

まとめ

 

Pandasのread_csv()read_table()は、外部テキストファイルからデータを効率的にDataFrameとして読み込むための不可欠なツールです。

  • read_csv(): デフォルトでカンマ区切りファイルを読み込み、sepオプションで任意の区切り文字に対応します。

  • read_table(): デフォルトでタブ区切りファイルを読み込みます。

これらの関数と主要なオプション(sep / delimiterheadernamesdtypeencodingskiprowsなど)を使いこなすことで、様々な形式のCSV/TSVファイルを柔軟に読み込み、データ分析の最初の一歩をスムーズに進めることができます。