Pandas pd.ead_csv() 関数
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_buffer | str、path object、または file-like object | CSVファイルのパス、URL、またはファイルオブジェクト | 必須 |
| sep | str | フィールド区切り文字。CSVのデフォルトはカンマです | ',' |
| header | int, list of int, 'infer' | 列名として使う行番号。0は最初の行を表します | 'infer' |
| names | list-like | カスタム列名のリスト | None |
| index_col | int, str, list of int, list of str, False | 行インデックスとして使う列 | None |
| usecols | list-like, callable | 指定した列のみ読み込む | None |
| dtype | dict | 列のデータ型を指定します。例: {'a': np.float64} | None |
| skiprows | list-like, int | 指定した行をスキップする | None |
| nrows | int | 最初のn行のみ読み込む | None |
| na_values | scalar, str, list-like, dict | NA/NaNとして認識する値 | None |
| encoding | str | ファイルのエンコーディング。例: '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())
# サンプル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)
# テストデータを作成する
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)
# 特殊データを含む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ファイルを効率的に処理でき、その後のデータクレンジングと分析の強固な基盤を築けます。読者はぜひ練習を重ね、これらのよく使うパラメータを確実に習得することをお勧めします。
Pandas よく使う関数