複数ファイル一括読み込み
nehan では、複数のファイルを一度にデータソースとしてインポートすることができます。この機能を使用すると、同じ形式の複数のファイルを効率的に読み込み、単一のデータソースとして扱うことができます。
複数ファイルの一括読み込みは、以下のような場合に特に便利です。
- 同じ形式の日次/月次データファイルを一度に読み込む
- 複数の部門/地域からのデータを統合する
- 大きなデータセットが複数のファイルに分割されている場合
列構造による挙動の違い
複数ファイルを読み込む際の挙動は、ファイルの列構造によって異なります。
列構造が同じファイルの場合
すべてのファイルの列構造が同じ場合、データは単純に縦方向に結合されます。
例えば、以下のような 2 つの CSV ファイルがあるとします。
ファイル 1(sales_jan.csv):
商品 ID(文字列型) | 商品名(文字列型) | 売上(数値型) |
---|---|---|
1001 | 商品 A | 5000 |
1002 | 商品 B | 3000 |
ファイル 2(sales_feb.csv):
商品 ID(文字列型) | 商品名(文字列型) | 売上(数値型) |
---|---|---|
1001 | 商品 A | 6000 |
1003 | 商品 C | 4000 |
これらのファイルを一括読み込みすると、結果は以下のようになります。
商品 ID(文字列型) | 商品名(文字列型) | 売上(数値型) |
---|---|---|
1001 | 商品 A | 5000 |
1002 | 商品 B | 3000 |
1001 | 商品 A | 6000 |
1003 | 商品 C | 4000 |
この場合、データは単純に縦に結合され、列の型も保持されます。
列構造が異なるファイルの場合
ファイル間で列構造が異なる場合、システムは自動的に以下の処理を行います。
- すべてのファイルの列を統合して、最終的なデータセットの列構造を決定
- 特定のファイルに存在しない列には、
<NA>
を設定 - 列の型が異なる場合は、強制的に文字列型に変換
例えば、以下のような 2 つの CSV ファイルがあるとします。
ファイル 1(products.csv):
商品 ID(数値型) | 商品名(文字列型) | 価格(数値型) |
---|---|---|
1001 | 商品 A | 500 |
1002 | 商品 B | 300 |
ファイル 2(inventory.csv):
商品 ID(文字列型) | 在庫数(数値型) | 倉庫(文字列型) |
---|---|---|
1001 | 100 | 東京 |
1003 | 150 | 大阪 |
これらのファイルを一括読み込みすると、結果は以下のようになります。
商品 ID(文字列型) | 商品名(文字列型) | 価格(数値型) | 在庫数(数値型) | 倉庫(文字列型) |
---|---|---|---|---|
1001 | 商品 A | 500 | <NA> | <NA> |
1002 | 商品 B | 300 | <NA> | <NA> |
1001 | <NA> | <NA> | 100 | 東京 |
1003 | <NA> | <NA> | 150 | 大阪 |
この例では。
- すべてのファイルの列が統合されて 5 列になっています
- 各ファイルに存在しない列には、
<NA>
値が設定されています - 商品 ID列は異なる型(数値型と文字列型)を持っているため、強制的に文字列型に変換されています
列の順序に関する仕様
1. 最初のファイルの列順序が優先される
最初に読み込まれたファイルの列順序が、結合後のデータフレームの列順序の基準となります 後続のファイルの列は、最初のファイルの列順序に合わせて並べ替えられます
2. 共通列の処理
複数のファイルに共通して存在する列は、最初のファイルでの順序を維持します 例: ファイル 1 にA,B,C、ファイル 2 にC,B,Dという列がある場合、結合後はA,B,C,Dの順になります
3. 固有列の追加ルール
最初のファイルにない列(後続ファイルにのみ存在する列)は、元のファイルでの相対的な順序を保ちながら、最後に追加されます 例: ファイル 1 にA,B,C、ファイル 2 にD,E、ファイル 3 にF,Gという列がある場合、結合後はA,B,C,D,E,F,Gの順になります
特殊なデータ型の処理
以下の特殊なデータ型は、常に文字列型に変換されます。
- 配列型(ArrayType)
- JSON ファイルなどに含まれる配列は文字列として扱われます
- 真偽型(BooleanType)
- 真偽値(true/false)は文字列として扱われます
- マップ型(MapType)
- キー・値のペアは文字列として扱われます
- 構造体型(StructType)
- ネストされたオブジェクトは文字列として扱われます
読み込みオプションの挙動
CSV/TSV/Text ファイル
区切り文字
すべてのファイルに同じ区切り文字設定が適用されます。
異なる区切り文字を持つファイルを混在させると、正しく読み込めない場合があります。
文字コード
すべてのファイルに同じ文字コード設定が適用されます。
異なる文字コードのファイルを混在させると、文字化けが発生する可能性があります。
改行コード
すべてのファイルに同じ改行コード設定が適用されます。
異なる改行コードのファイルを混在させると、正しく読み込めない場合があります。
ファイルの圧縮タイプ
圧縮されたファイル(gzip, zip, bz2 など)を読み込む場合、すべてのファイルに同じ圧縮タイプ設定が適用されます。
異なる圧縮タイプのファイルを混在させると、正しく読み込めない場合があります。
Excel ファイル
シート選択
シート選択設定はすべての Excel ファイルに適用されます。
例えばSheet1を指定した場合、すべての Excel ファイルのSheet1が読み込まれます。
シート名の一貫性
ファイルによってシート名が異なる場合、シート番号での指定をお勧めします。
複数シート指定
複数のシートを指定した場合、各ファイルの指定されたすべてのシートが読み込まれ、結合されます。
書式の違い
ファイルによって同じデータでも書式が異なる場合(例。日付の表示形式)、型の不一致が発生する可能性があります。
JSON ファイル
文字コード
すべてのファイルに同じ文字コード設定が適用されます。
異なる文字コードのファイルを混在させると、文字化けが発生する可能性があります。
ファイルの圧縮タイプ
圧縮されたファイル(gzip, zip, bz2 など)を読み込む場合、すべてのファイルに同じ圧縮タイプ設定が適用されます。
異なる圧縮タイプのファイルを混在させると、正しく読み込めない場合があります。
データ調整オプションの挙動
複数ファイルを読み込む際のデータ調整オプションの挙動について説明します。
読み込む列を指定する
読み込む列を指定するオプションを使用すると、読み込む列を制限できます。
- このオプションは、各ファイルに個別に適用されます
- 指定した列のみが各ファイルから読み込まれ、結合されます
- 一部のファイルに指定した列が存在しない場合、その列は
<NA>
値として扱われます
例:商品 IDと価格の列のみを読み込むように指定した場合
ファイル 1(products.csv):
商品 ID | 商品名 | 価格 |
---|---|---|
1001 | 商品 A | 500 |
1002 | 商品 B | 300 |
ファイル 2(inventory.csv):
商品 ID | 在庫数 | 倉庫 |
---|---|---|
1001 | 100 | 東京 |
1003 | 150 | 大阪 |
結果は以下のようになります。
商品 ID | 価格 |
---|---|
1001 | 500 |
1002 | 300 |
1001 | <NA> |
1003 | <NA> |
この例では、価格列はファイル 2 に存在しないため、ファイル 2 からのデータには <NA>
値が設定されています。
1 行目を列名として扱う
1 行目を列名として扱うオプションは、ファイルの 1 行目をヘッダー(列名)として扱うかどうかを指定します。
- このオプションは、すべてのファイルに一律に適用されます
- オンの場合。各ファイルの 1 行目が列名として使用され、2 行目以降がデータとして読み込まれます
- OFF の場合。すべてのファイルの 1 行目からデータとして読み込まれ、列名は自動的に列 1、列 2…と設定されます
複数ファイルを読み込む際は、すべてのファイルのヘッダー構成が一致していることが重要です。一部のファイルにのみヘッダーがある場合、データが正しく解釈されない可能性があります。
例:1 行目を列名として扱うオプションの挙動
サンプルファイル 1(sales_2023.csv):
商品名 | 売上 | 月 |
---|---|---|
商品 A | 10000 | 1 月 |
商品 B | 15000 | 1 月 |
商品 A | 12000 | 2 月 |
商品 B | 13000 | 2 月 |
サンプルファイル 2(sales_2024.csv:
商品名 | 売上 | 月 |
---|---|---|
商品 A | 11000 | 1 月 |
商品 B | 16000 | 1 月 |
商品 C | 9000 | 1 月 |
商品 A | 13000 | 2 月 |
オプションがオンの場合(デフォルト)
両方のファイルの 1 行目が列名として扱われ、2 行目以降がデータとして結合されます。
商品名 | 売上 | 月 |
---|---|---|
商品 A | 10000 | 1 月 |
商品 B | 15000 | 1 月 |
商品 A | 12000 | 2 月 |
商品 B | 13000 | 2 月 |
商品 A | 11000 | 1 月 |
商品 B | 16000 | 1 月 |
商品 C | 9000 | 1 月 |
商品 A | 13000 | 2 月 |
- 読み込まれるデータ行数: 9 行(両ファイルの 2 行目以降)
- 列名: 商品名、売上、月(各ファイルの 1 行目から取得)
- 注意: 両ファイルの列名が一致している必要があります
オプションが OFF の場合
両方のファイルの 1 行目もデータとして扱われます。
列 1 | 列 2 | 列 3 |
---|---|---|
商品名 | 売上 | 月 |
商品 A | 10000 | 1 月 |
商品 B | 15000 | 1 月 |
商品 A | 12000 | 2 月 |
商品 B | 13000 | 2 月 |
商品名 | 売上 | 月 |
商品 A | 11000 | 1 月 |
商品 B | 16000 | 1 月 |
商品 C | 9000 | 1 月 |
商品 A | 13000 | 2 月 |
- 読み込まれるデータ行数: 11 行(両ファイルの全行)
- 列名: 列 1、列 2、列 3(自動生成)
- 注意: 各ファイルの 1 行目(元の列名行)もデータとして読み込まれるため、データ内に列名が含まれることになります
各ファイルから読み込む行数を指定する
各ファイルから読み込む行数を指定するオプションを使用すると、各ファイルから読み込む行数を制限できます。
- このオプションは、各ファイルに個別に適用されます
- 指定した行数だけ各ファイルから読み込まれます(ヘッダー行を含む場合は、ヘッダー行も行数にカウントされます)
- 合計の行数ではなく、各ファイルごとの行数制限であることに注意してください
例:各ファイルから 2 行読み込むと指定した場合
ファイル 1(3 行のデータ):
列 1 | 列 2 |
---|---|
A | 1 |
B | 2 |
C | 3 |
ファイル 2(4 行のデータ):
列 1 | 列 2 |
---|---|
D | 4 |
E | 5 |
F | 6 |
G | 7 |
結果は以下のようになります(ヘッダーを含む場合)。
列 1 | 列 2 |
---|---|
A | 1 |
D | 4 |
ヘッダーを含まない設定の場合。
列 1 | 列 2 |
---|---|
列 1 | 列 2 |
A | 1 |
D | 4 |
先頭から行数をスキップし以降を読み込む
先頭から行数をスキップし以降を読み込むオプションを使用すると、各ファイルの先頭から指定した行数をスキップしてデータを読み込むことができます。
- このオプションは、各ファイルに個別に適用されます
- 指定した行数が各ファイルの先頭からスキップされます
- 1 行目を列名として扱うオプションがオンの場合、スキップする行数はヘッダー行の後から計算されます
例:先頭から 1 行スキップし以降を読み込むと指定した場合
ファイル 1:
列 1 | 列 2 |
---|---|
A | 1 |
B | 2 |
C | 3 |
ファイル 2:
列 1 | 列 2 |
---|---|
D | 4 |
E | 5 |
F | 6 |
結果は以下のようになります(ヘッダーを含む場合)。
列 1 | 列 2 |
---|---|
B | 2 |
C | 3 |
E | 5 |
F | 6 |
ヘッダーを含まない設定の場合。
列 1 | 列 2 |
---|---|
A | 1 |
B | 2 |
C | 3 |
E | 5 |
F | 6 |