Pandas pd.ead_csv() 関数

Python math 模块Pandas よく使う関数


read_csv()pandasライブラリで最もよく使われるデータ読み込み関数であり、CSV(カンマ区切り値)ファイルからデータを読み取ってDataFrameを作成します。

CSVファイルは、シンプルで広く使われているデータ交換形式です。プレーンテキスト形式で表データを保存し、各行が1レコードを表し、フィールドはカンマで区切られます。read_csv()CSVファイルをスマートに解析し、列名やデータ型を自動的に認識し、さまざまな区切り文字やエンコーディングの問題を処理できます。


基本構文とパラメータ

構文形式

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',
                names=None, index_col=None, usecols=None, dtype=None,
                skiprows=None, nrows=None, na_values=None, ...)

パラメータの説明

パラメータ型説明デフォルト値
filepath_or_bufferstr、path object、または file-like objectCSVファイルのパス、URL、またはファイルオブジェクト必須
sepstrフィールド区切り文字。CSVのデフォルトはカンマです','
headerint, list of int, 'infer'列名として使う行番号。0は最初の行を表します'infer'
nameslist-likeカスタム列名のリストNone
index_colint, str, list of int, list of str, False行インデックスとして使う列None
usecolslist-like, callable指定した列のみ読み込むNone
dtypedict列のデータ型を指定します。例: {'a': np.float64}None
skiprowslist-like, int指定した行をスキップするNone
nrowsint最初のn行のみ読み込むNone
na_valuesscalar, str, list-like, dictNA/NaNとして認識する値None
encodingstrファイルのエンコーディング。例: 'utf-8'None

戻り値

  • 戻り値の型:pd.DataFrame
  • 2次元のラベル付きデータ構造、つまりpandasのDataFrameを返します。これに対してさまざまなデータ分析や処理操作を行うことができます。

例

以下の例を通じて、総合的に習得できます。read_csv()のさまざまな使い方。

例1:ローカルCSVファイルの読み込み

まず簡単なCSVファイルを作成し、次にread_csv()それを読み取ります。

例

import pandas as pd

# サンプルCSVファイルを作成する
# まずテストデータを書き込む
data = """name,age,city,salary
Tom,28,Beijing,8000
Jerry,35,Shanghai,12000
Mike,42,Guangzhou,15000
Lucy,26,Shenzhen,7000
"""


# データをファイルに書き込む(実際に使用する場合、既存のファイルを直接読み込める)
with open('employees.csv', 'w', encoding='utf-8') as f:
    f.write(data)

# read_csv を使用してCSVファイルを読み込む
# filepath_or_buffer: ファイルパス(必須)
df = pd.read_csv('employees.csv')

# 読み込み結果を確認する
print("読み込んだDataFrame:")
print(df)
print("nデータ型:")
print(df.dtypes)
print("n列名:", df.columns.tolist())

実行結果の期待値:

读取的 DataFrame:
    name  age       city  salary
0    Tom   28    Beijing    8000
1  Jerry   35   Shanghai   12000
2   Mike   42  Guangzhou   15000
3   Lucy   26  Shenzhen    7000

数据类型:
name      object
age        int64
city      object
salary    int64

列名: ['name', 'age', 'city', 'salary']

コードの解説:

  • pd.read_csv('employees.csv')は最も基本的な使い方で、ファイルパスを直接渡すだけで十分です。
  • デフォルトでは、最初の行が列名として自動的に認識されます(header='infer')。
  • pandasは各列のデータ型を自動的に推論します。文字列はobject型、整数はint64型になります。
  • 返されたDataFrameは直接使用してprint()表示して確認したり、後続のデータ分析を行ったりできます。

例2:列名のカスタマイズと特定の列の選択

実際の作業では、列名をカスタマイズしたり、パフォーマンスを向上させるために一部の列だけを読み込んだりする必要があるかもしれません。

例

import pandas as pd

# テストデータを作成する
data = """name,age,city,salary,department
Tom,28,Beijing,8000,IT
Jerry,35,Shanghai,12000,HR
Mike,42,Guangzhou,15000,Sales
Lucy,26,Shenzhen,7000,IT
"""


with open('employees2.csv', 'w', encoding='utf-8') as f:
    f.write(data)

# 例2a: 列名をカスタマイズする
# names パラメータは新しい列名を指定するために使われ、元のファイルの列名を上書きします
df_custom = pd.read_csv('employees2.csv', names=['名前', '年齢', '都市', '給与', '部門'], header=0)
print("列名をカスタマイズした後のDataFrame:")
print(df_custom)
print()

# 例2b: 指定した列のみ読み込む
# usecols パラメータで読み込む列を指定でき、パフォーマンスが向上します
df_partial = pd.read_csv('employees2.csv', usecols=['name', 'salary'])
print("一部の列のみを読み込む:")
print(df_partial)
print()

# 例2c: index_col を使用してインデックス列を指定する
df_indexed = pd.read_csv('employees2.csv', index_col='name')
print("name をインデックスに設定:")
print(df_indexed)

実行結果の期待値:

自定义列名后的 DataFrame:
    姓名  年龄       城市    薪资     部门
0   Tom   28    Beijing   8000      IT
1  Jerry   35   Shanghai  12000      HR
2   Mike   42  Guangzhou  15000   Sales
3   Lucy   26   Shenzhen   7000      IT

只读取部分列:
   name  salary
0    Tom    8000
1  Jerry   12000
2   Mike   15000
3    Lucy    7000

设置 name 为索引:
      age       city  salary department
name
Tom     28    Beijing    8000         IT
Jerry  35   Shanghai   12000         HR
Mike   42  Guangzhou   15000       Sales
Lucy   26   Shenzhen    7000         IT

コードの解説:

  • namesパラメータはデータの列数と一致させる必要があります。ファイルにヘッダー行がある場合は、設定してくださいheader=0header=None を使用して元のヘッダーを使用します。
  • usecols列名リスト(推奨)または列インデックスリストを渡すことができます。返される列の順序は指定した順序と一致します。
  • index_colある列を行インデックスとして設定すると、後でインデックスを使ってデータを素早く検索できます。

例3:特殊データの処理と欠損値処理の改善

CSVファイルには、欠損値や特殊な区切り文字が含まれている場合や、特定の行をスキップする必要がある場合があります。

例

import pandas as pd

# 特殊データを含むCSVファイルを作成する
# セミコロンを区切り文字として使用し、欠損値とNA値を含む
data = """name;age;city;salary
Tom;28;Beijing;8000
Jerry;;Shanghai;12000
Mike;42;Guangzhou;
Lucy;26;NA;7000
"""


with open('employees3.csv', 'w', encoding='utf-8') as f:
    f.write(data)

# 例3a: セミコロン区切りのファイルを読み込む
df_semicolon = pd.read_csv('employees3.csv', sep=';')
print("セミコロン区切り文字を使用:")
print(df_semicolon)
print("欠損値の統計:")
print(df_semicolon.isnull())
print()

# 例3b: 欠損値とみなす値を指定する
df_na = pd.read_csv('employees3.csv', sep=';', na_values=['NA', 'missing'])
print("NA値をカスタマイズした後:")
print(df_na)
print()

# 例3c: 行のスキップと読み込み行数の制限
# ファイルの最初の数行がコメントである場合は、スキップできます
data_with_comment = """# これは従業員データファイルです
# 作成日: 2024-01-01
name;age;city;salary
Tom;28;Beijing;8000
Jerry;35;Shanghai;12000
Mike;42;Guangzhou;15000
Lucy;26;Shenzhen;7000
"""

with open('employees4.csv', 'w', encoding='utf-8') as f:
    f.write(data_with_comment)

# skiprows は最初の2行(コメント行)をスキップします
df_skip = pd.read_csv('employees4.csv', sep=';', skiprows=2)
print("コメント行をスキップした後:")
print(df_skip)
print()

# nrows は最初の3行のみ読み込む
df_nrows = pd.read_csv('employees4.csv', sep=';', skiprows=2, nrows=3)
print("最初の3行のみ読み込む:")
print(df_nrows)

実行結果の期待値:

使用分号分隔符:
    name  age       city   salary
0    Tom   28.0    Beijing   8000.0
1  Jerry   NaN   Shanghai  12000.0
2    NaN  42.0   Guangzhou      NaN
3  Lucy  26.0         NA    7000.0

缺失值统计:
    name    age   city  salary
0  False  False  False   False
1  False   True  False   False
2   True  False  False    True
3  False  False   False  False

自定义 NA 值后:
    name  age       city   salary
0    Tom  28.0    Beijing   8000.0
1  Jerry   NaN   Shanghai  12000.0
2   NaN  42.0   Guangzhou      NaN
3  Lucy  26.0         NaN   7000.0

跳过注释行后:
    name  age       city  salary
0    Tom   28   Beijing    8000
1  Jerry  35  Shanghai   12000
  42  Guangzhou   15000
2   Mike
3   Lucy   26   Shenzhen    7000

只读取前3行:
    name  age       city  salary
0    Tom   28   Beijing    800本地
1  Jerry  35   Shanghai   12000
2   Mike   42  Guangzhou   15000

コードの解説:

  • sepパラメータはセミコロンやタブなどの任意の区切り文字を指定できます。
  • デフォルトでは、空文字列や空白などが欠損値として認識されます。設定することでna_valuesパラメータを使用して、NAとみなす値をカスタマイズできます。
  • skiprowsファイル先頭の指定した行数をスキップできるため、コメント付きファイルの処理が簡単になります。
  • nrows読み込む行数を制限するため、大きなファイルの分割読み込みに適しています。

注意事項

  • 大きなファイルを読み込む場合は、次を使用することを検討できますchunksizeパラメータによる分割読み込みで、メモリ不足を回避できます。
  • 中国語のファイルを処理する場合は、正しく指定する必要がありますencodingencoding パラメータです。一般的なエンコーディングは 'utf-8'、'gbk'、'gb2312' などです。
  • CSVファイルにヘッダー行がない場合は、設定する必要がありますheader=None、次にnamesパラメータで列名を指定します。
  • 形式が標準的でないCSVファイルの場合は、調整が必要な場合がありますsep、quotecharなどのパラメータを調整して正しく解析します。

まとめ

read_csv()pandasで最も基本的かつ重要なデータ読み込み関数です。多機能で、さまざまな区切り文字、カスタム列名、インデックス設定、欠損値処理などの高度な機能をサポートしています。

実際のデータ分析業務では、read_csv()のさまざまなパラメータの使い方をマスターすることで、さまざまな形式のCSVファイルを効率的に処理でき、その後のデータクレンジングと分析の強固な基盤を築けます。読者はぜひ練習を重ね、これらのよく使うパラメータを確実に習得することをお勧めします。

Python math 模块Pandas よく使う関数

その他の拡張