以下の内容はhttps://pydocument.hatenablog.com/entry/2023/03/27/232100より取得しました。


Python pandasのread_csv()関数のオプションとその利用例

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())

まとめ

pandasread_csv() 関数は、オプションを適切に組み合わせることで、様々な形式の CSV ファイルに対応でき、データ分析作業を大幅に効率化できます。

pydocument.hatenablog.com

[PR]

click.linksynergy.com

click.linksynergy.com




以上の内容はhttps://pydocument.hatenablog.com/entry/2023/03/27/232100より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14