🐍
(学習ログ)Python002:複数CSVを読み込み、1つのDataFrameに結合して先頭を確認
1. はじめに
-
この記事の目的
- 2つのCSVファイルを
pandasで読み込み、縦方向に結合(行方向に追加)し、内容の冒頭を確認する最小コードを理解します。
- 2つのCSVファイルを
-
この記事の概要
-
pd.read_csv()での読み込み -
pd.concat()での結合(ignore_index=Trueの意味) - 結合後の確認手順(
head()、shapeなど)をシンプルに解説します。
-
2. サンプルコード
コード全文
import pandas as pd
# 1) CSVを2つ読み込む
sample_transaction1 = pd.read_csv('001_サンプル/sample_transaction_data1.csv')
sample_transaction2 = pd.read_csv('001_サンプル/sample_transaction_data2.csv')
# 2) 縦方向(行方向)に結合する
sample_transaction = pd.concat([sample_transaction1, sample_transaction2], ignore_index=True)
# 3) 先頭5行を確認する
sample_transaction.head()
行ごとの説明
-
import pandas as pd- データ操作ライブラリpandasを
pdという短い名前で使えるようにします。
- データ操作ライブラリpandasを
-
pd.read_csv('...1.csv')/pd.read_csv('...2.csv')- 各CSVを
DataFrameとして読み込みます。列名や型はCSVの表頭・内容に依存します。
- 各CSVを
-
pd.concat([df1, df2], ignore_index=True)- 2つの
DataFrameを「下に積む」ように結合します。 -
ignore_index=Trueにより、新しい連番(0,1,2, …)でインデックスを振り直します。
- 2つの
-
.head()- 先頭5行を表示して、読み込みと結合が想定どおりか手早く確認します。
実行結果例
transaction_id customer_id date item qty price
0 1 101 2025-09-25 banana 2 120
1 2 101 2025-09-25 milk 1 180
2 3 203 2025-09-26 bread 1 150
3 4 150 2025-09-26 apple 3 100
4 5 150 2025-09-27 chocolate 2 220
※ あくまで例です。お手元のCSVに合わせて表示内容は変わります。
3. エラーと確認のポイント
代表的なエラー文
-
ファイルが見つからない
FileNotFoundError: [Errno 2] No such file or directory: '001_サンプル/sample_transaction_data1.csv'-
原因:相対パスの起点が想定と違う/ファイル名のタイプミス/フォルダ構成が異なる
-
対策:実行中のカレントディレクトリを確認し、正しい相対パスまたは絶対パスを指定する
import os print(os.getcwd()) # 今いるフォルダを確認
-
-
文字コードの問題
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x.. in position ...-
原因:CSVがUTF-8ではなく、Shift_JIS等で保存されている
-
対策:
encodingを指定df = pd.read_csv('file.csv', encoding='cp932') # 日本語WindowsのExcel想定
-
-
列の不整合(結合時の想定外のNaN)
-
症状:
concat後、一方にしかない列がNaNで埋まる -
原因:ファイル間で列名や列数が異なる
-
対策:読み込み前に列名を合わせる/
usecols=で必要列に絞る/列のリネームを行うdf = pd.read_csv('file.csv') df = df.rename(columns={'顧客ID': 'customer_id'})
-
よく使う確認メソッドや出力例
-
サイズと列名の確認
sample_transaction.shape # (行数, 列数) を確認 sample_transaction.columns # 列名一覧を確認例:
sample_transaction.shape (2000, 6) sample_transaction.columns Index(['transaction_id', 'customer_id', 'date', 'item', 'qty', 'price'], dtype='object') -
ざっと中身を見る(先頭・末尾・情報)
sample_transaction.head(3) # 先頭3行 sample_transaction.tail(3) # 末尾3行 sample_transaction.info() # データ型や欠損状況の概観例(抜粋):
<class 'pandas.core.frame.DataFrame'> RangeIndex: 2000 entries, 0 to 1999 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 transaction_id 2000 non-null int64 1 customer_id 2000 non-null int64 2 date 2000 non-null object 3 item 1998 non-null object 4 qty 2000 non-null int64 5 price 2000 non-null int64 -
欠損や重複の簡易チェック
sample_transaction.isna().sum() # 列ごとの欠損数 sample_transaction.duplicated().sum() # 完全重複行の件数 -
想定型への変換(必要に応じて)
sample_transaction['date'] = pd.to_datetime(sample_transaction['date'], errors='coerce') sample_transaction['qty'] = pd.to_numeric(sample_transaction['qty'], errors='coerce') sample_transaction['price']= pd.to_numeric(sample_transaction['price'], errors='coerce')
小さなコツ:
appendは廃止予定だったため、 複数の結合は常にpd.concatを使うのがベストプラクティスです。ファイルが3つ以上あればlistに入れてconcatしましょう。
# 例:複数ファイルを一括結合
paths = [
'001_サンプル/sample_transaction_data1.csv',
'001_サンプル/sample_transaction_data2.csv',
'001_サンプル/sample_transaction_data3.csv',
]
dfs = [pd.read_csv(p) for p in paths]
sample_transaction = pd.concat(dfs, ignore_index=True)
4. まとめ
-
pd.read_csv()で複数のCSVをDataFrameとして読み込み、pd.concat()で縦方向結合できる。 -
ignore_index=Trueで新しい連番インデックスに振り直し、結合後のhead()・shape・info()で最小限の品質チェックができる。 - 典型的なエラー(パス・文字コード・列不整合)の原因と、実務的な確認メソッド(欠損・重複・型変換)を使った対処の流れが分かる。
Discussion