「巨大なデータをコピーしてスプレッドシートに貼り付けようとしたら、エラーで弾かれた…」

「インポートしようとしても『ファイルが大きすぎます』と拒否される…」

Googleスプレッドシートには、1セルあたり最大50,000文字1ファイルあたり最大1,000万セルという厳格な制限があります。これを超えると、通常のインポート作業は一切受け付けられません。

この記事では、Pythonを使って「1セルの文字数を自動で切り詰め」ながら「扱いやすいサイズにファイルを分割」する方法を解説します。

スポンサーリンク

1. 解決したい問題

TSVやCSVを扱う際、以下のようなエラーに遭遇することがあります。

  • 貼り付け時: 「問題が発生しました。入力内容が 1 つのセルに最大 50000 文字の制限を超えています。」
  • インポート時: 「サイズが大きすぎてインポートできません。行か列を削除して、もう一度お試しください。」

これを解決するため、「1セルあたりの文字数制限」と「行数分割」を同時に行うスクリプトを作成します。

2. Pythonスクリプトの準備

以下のコードを split_tsv.py という名前で保存してください。

import pandas as pd
import sys
import os
import csv

def split_tsv(input_file):
    rows_per_file = 30000 
    max_char_limit = 45000 

    if not os.path.exists(input_file):
        print(f"エラー: ファイル '{input_file}' が見つかりません。")
        return

    base_name = os.path.splitext(os.path.basename(input_file))[0]

    try:
        reader = pd.read_csv(
            input_file, 
            sep='\t', 
            chunksize=rows_per_file, 
            quoting=csv.QUOTE_NONE,
            on_bad_lines='warn',    # 不正行があればターミナルに表示
            skip_blank_lines=False, # 空行を数に含める
            engine='python'
        )
        
        total_processed_rows = 0
        for i, chunk in enumerate(reader):
            # 文字数制限を適用
            chunk = chunk.applymap(lambda x: str(x)[:max_char_limit] if isinstance(x, str) else x)
            
            output_file = f"{base_name}_split_result_{i+1}.tsv"
            # 出力時も引用符を付けず、タブ区切りを維持
            chunk.to_csv(output_file, sep='\t', index=False, encoding='utf-8-sig', quoting=csv.QUOTE_NONE)
            
            total_processed_rows += len(chunk)
            print(f"作成完了: {output_file} ({len(chunk)}行)")
        
        print(f"\n--- 最終集計 ---")
        print(f"Pythonが読み込んだデータ行数: {total_processed_rows}")
        print(f"ヘッダー(1行)を足した合計: {total_processed_rows + 1}")
            
    except Exception as e:
        print(f"実行エラー: {e}")

if __name__ == "__main__":
    if len(sys.argv) > 1:
        split_tsv(sys.argv[1])
    else:
        print("使用法: python3 split_tsv.py [ファイル名.tsv]")
スポンサーリンク

3. Macターミナルでの実行手順

Mac標準の「ターミナル」を使って実行します。

ステップ1:必要なライブラリのインストール

一度も Pandas を使ったことがない場合は、まず以下のコマンドを入力します。

pip3 install pandas

ステップ2:ファイルのあるフォルダへ移動

ターミナルを開き、cd(チェンジディレクトリ)コマンドを使って、スクリプトとTSVファイルがある場所に移動します。

-- 自分のスクリプトを保存したディレクトリに移動する
cd /Users/あなたのユーザー名/Documents/data_folder

※フォルダをターミナルにドラッグ&ドロップするとパスが自動入力されます。

ステップ3:スクリプトの実行

分割したいファイル名を指定して実行します。

python3 split_tsv.py target_data.tsv

実行が完了すると、

  • {入力ファイル名}_split_result_1.tsv
  • {入力ファイル名}_split_result_2.tsv ...
    と分割されたファイルが生成されます。

4. なぜこの方法が良いのか?

機能メリット
文字数カットスプレッドシート特有の「5万文字制限」を物理的に回避できる。
行数分割1ファイルあたりのセル数を抑え、シートが重くなるのを防ぐ。
BOM付きUTF-8Excelやスプレッドシートで開いた際の文字化けを防ぐ。
メモリ効率chunksize を使っているため、数GBの巨大ファイルでもPCがフリーズしにくい。

5. まとめ

スプレッドシートで扱えないほどの巨大データは、無理に開こうとせず「プログラムで前処理」をするのが最も近道です。

特に1セルに長い文章(ログ、スクレイピング結果、長文テキストなど)が入っている場合は、今回紹介した文字数カット(applymap)の手法が非常に有効です。

ぜひ、データ分析の下準備に活用してみてください!


この記事が気に入ったら『目黒で働く分析担当の作業メモ』ご支援をお願いします!

※OFUSEに飛びます


おすすめの記事