Python の pandas ライブラリはデータ分析に広く利用されており、read_csv() 関数はその中でも CSV ファイル読み込みの基本となる機能です。read_csv() 関数は多くのオプションを持ち、これらを適切に理解、利用することでデータの処理が楽になります。
基本的な CSV ファイルの読み込み
最もシンプルな CSV ファイルの読み込みは、ファイルパスのみを指定して実行します。
import pandas as pd df = pd.read_csv('data.csv')
このコードは、data.csv という名前のファイルを読み込み、Pandas の DataFrame オブジェクト df に格納します。
デフォルトでは、read_csv() 関数は以下の設定でファイルを読み込みます。
- 区切り文字: カンマ (
,) - ヘッダー: ファイルの最初の行をヘッダー(カラム名)として認識
- インデックス: インデックス列は自動的に付与 (0 から始まる連番)
主要オプションの詳細と使用例
read_csv() 関数は、様々なオプションを指定することで、読み込み動作を細かく制御できます。以下に主要なオプションとその使用例を示します。
| オプション | 説明 | 使用例 |
|---|---|---|
sep (または delimiter) |
ファイルの区切り文字を指定します。 | pd.read_csv('data.tsv', sep='\t') (タブ区切りの場合) |
header |
ヘッダー行を指定します。整数で行番号を指定するか、None でヘッダーなしとします。 |
pd.read_csv('data.csv', header=0) (1行目をヘッダーとする, デフォルト) pd.read_csv('data.csv', header=None) (ヘッダーなし) |
index_col |
インデックスとして使用する列を指定します。列番号(0始まり)または列名で指定します。 | pd.read_csv('data.csv', index_col=0) (1列目をインデックスとする) pd.read_csv('data.csv', index_col='ID') (ID列をインデックスとする) |
usecols |
読み込む列をリストで指定します。列番号(0始まり)または列名で指定します。 | pd.read_csv('data.csv', usecols=[0, 2]) (1列目と3列目を読み込む) pd.read_csv('data.csv', usecols=['Name', 'Age']) (Name列とAge列を読み込む) |
dtype |
列のデータ型を辞書形式で指定します。{'列名': データ型} の形式で指定します。 |
pd.read_csv('data.csv', dtype={'ID': str, 'Age': int}) (ID列を文字列、Age列を整数として読み込む) |
skiprows |
読み込み時にスキップする行数を指定します。整数またはスキップする行番号のリストを指定します。 | pd.read_csv('data.csv', skiprows=10) (最初の10行をスキップ) pd.read_csv('data.csv', skiprows=[1, 3, 5]) (1, 3, 5行目をスキップ) |
nrows |
読み込む行数を指定します。 | pd.read_csv('data.csv', nrows=100) (最初の100行を読み込む) |
na_values |
欠損値として扱う文字列を指定します。 | pd.read_csv('data.csv', na_values=['N/A', 'null', '']) |
parse_dates |
日付としてパースする列をリストで指定します。 | pd.read_csv('data.csv', parse_dates=['Date']) (Date列を日付型として読み込む) |
区切り文字の指定 (sep, delimiter)
カンマ区切りでないCSVファイル(例えばタブ区切り)を読み込む場合は、sep オプションで区切り文字を指定します。
# タブ区切りのファイル (data.tsv) を読み込む df = pd.read_csv('data.tsv', sep='\t')
delimiter オプションは sep オプションの別名であり、同じように使用できます。
ヘッダー行の指定 (header)
ファイルにヘッダー行がない場合、header=None を指定します。
# ヘッダーがないCSVファイルを読み込む df = pd.read_csv('data_no_header.csv', header=None)
複数行をヘッダーにしたい場合はリストで指定します(例: header=[0, 1, 2])。
インデックス列の指定 (index_col)
特定の列をインデックスとして使用したい場合は、index_col オプションで列番号または列名を指定します。
# 1列目をインデックスとして読み込む df = pd.read_csv('data.csv', index_col=0) # 'ID' 列をインデックスとして読み込む df = pd.read_csv('data.csv', index_col='ID')
読み込む列の指定 (usecols)
必要な列だけを読み込むには、usecols オプションを使用します。
# 'Name' 列と 'Age' 列のみを読み込む df = pd.read_csv('data.csv', usecols=['Name', 'Age']) # 1列目と3列目のみを読み込む df = pd.read_csv('data.csv', usecols=[0, 2])
データ型の指定 (dtype)
列ごとに異なるデータ型を指定するには、dtype オプションを使用します。
# 列ごとにデータ型を指定して読み込む df = pd.read_csv('data.csv', dtype={'ID': str, 'Age': 'Int64', 'City': str})
Pandasのデータ型にInt64のように大文字で始まるものがありますが、これは欠損値(NaN)を許容する整数型です。
特定の行をスキップ (skiprows)
ヘッダー行以外の不要な行をスキップするには、skiprows オプションを使用します。
# 最初の5行をスキップして読み込む df = pd.read_csv('data.csv', skiprows=5) # 特定の行番号 (1, 3, 5行目) をスキップする df = pd.read_csv('data.csv', skiprows=[1, 3, 5])
読み込む行数を制限 (nrows)
ファイルの先頭から一部の行だけを読み込むには、nrows オプションを使用します。
# 最初の100行だけを読み込む df = pd.read_csv('data.csv', nrows=100)
欠損値の扱い(na_values)
特定の文字列を欠損値として読み込む場合はna_valuesを指定します。
# 'N/A', 'null', '' を欠損値として認識する df = pd.read_csv('data.csv', na_values=['N/A', 'null', ''])
日付のパース(parse_dates)
日付・時刻を含む列がある場合は、parse_datesオプションで、日付型として読み込むように指定できます。
# 'Date'列を日付としてパースする df = pd.read_csv('data.csv', parse_dates=['Date']) # 複数の列を組み合わせて日付にする場合 df = pd.read_csv('data.csv', parse_dates=[['Year', 'Month', 'Day']])
parse_datesで指定した複数の列を結合して日付にパースした場合は、指定した複数の列は削除され、結合された日付の列が追加されます。
列名は、指定した列を_で結合した文字列になります。
上記の例では、Year_Month_Dayという列が追加されます。
応用: 実践的な処理のサンプルコード
ここでは、より実践的なデータ処理の例として、以下の処理を実行するread_csv()のデータ読み込みを行なっていきます。
- 基本的な読み込み: まずは単純に CSV ファイルを読み込みます。
- データ型の確認と指定: 各列のデータ型を確認し、必要に応じて
dtypeオプションで明示的に指定します。 - 不要な列の除外:
usecolsオプションで分析に必要な列のみを選択します。 - 欠損値の処理:
na_valuesを指定し、特定の文字列を欠損値として読み込みます。 - 日付の扱い:
parse_datesで日付・時刻を含む列がある場合は、日付型として読み込みます。
サンプルコード
import pandas as pd # 1. 基本的な読み込み df = pd.read_csv('data.csv') print(df.info()) # 各列のデータ型や欠損値の数を確認 # 2. データ型の確認と指定 # (例: 'ID' 列は文字列、'Value' 列は数値として扱いたい場合) df = pd.read_csv('data.csv', dtype={'ID': str, 'Value': float}) # 3. 不要な列の除外 ('ID' 列と 'Value' 列のみを使用) df = pd.read_csv('data.csv', dtype={'ID': str, 'Value': float}, usecols=['ID', 'Value']) # 4. 欠損値の処理 df = pd.read_csv('data.csv', dtype={'ID': str, 'Value': float}, usecols=['ID', 'Value'], na_values=['Unknown']) # 5. 日付の扱い df = pd.read_csv('data.csv', dtype={'ID': str, 'Value': float, 'EventDate':str}, usecols=['ID', 'Value', 'EventDate'], na_values=['Unknown'], parse_dates=['EventDate']) print(df.head()) # 処理後のデータの先頭部分を確認 print(df.info())
まとめ
pandas の read_csv() 関数は、オプションを適切に組み合わせることで、様々な形式の CSV ファイルに対応でき、データ分析作業を大幅に効率化できます。
[PR]