大きなcsvまたはテキストファイルを開く方法

投稿ビュー:3,861

問題

Excelで作業している場合、ある時点で、大きなcsvまたはテキストファイルを開こうとしましたが、おそらくそれらを開くことができませんでした。 私の同僚はかつて8GBの大きなcsvファイルを受け取りました。 彼はコンテンツを覗いてみたかったが、彼が試したプログラム、メモ帳、Excelなどを使用して開くことができなかった。 このファイルは、プログラムを開始するには大きすぎました。

だから彼は助けを求めて私に手を差し伸べた。 彼の要求は比較的簡単でした: 8GBの大きなcsvファイルを開き、最初の数千行のデータを見ることができます。 この一見不可能な作業は、適切なツール–Pythonを選ぶと簡単です。

私たちのアプローチ

まず、大きなcsvの内容を調べる方法を探ります。 次に、大きなファイルを小さなファイルに分割して、データが実行可能になるようにします(開くことができますか?)をエクセルで。

デモ目的では、8GBの大きなcsvファイルを使用せず、代わりに2,600行のデータのみを持つ小さなファイルを使用します。 あなたが一緒にフォローしたい場合は、ここから例をダウンロードして自由に感じます。

ソリューション

いつものように、必要なライブラリをインポートすることから始めます。

import pandas as pd 
df = pd.read_csv('large_data.csv')
df_small = pd.read_csv('large_data.csv', nrows = 1000)

pd.read_csv() 私たちはいずれかを読むことができます。csvファイルをPythonに変換し、ファイルサイズに関係なく–この点については後で詳しく説明します。 Csvファイルはカンマ区切りの値ファイルで、基本的にはテキストファイルです。 このpandasメソッドには、ロードする行数を指定するオプションの引数nrowsがあります。

最初の変数dfはcsvファイル内のすべてをロードしました。 一方、2番目の変数df_smallは最初の1,000行のデータのみをロードしました。 それを確認するには、.shape属性を呼び出します。

2つのデータフレームのサイズ(行数、列数)

上に示したように、”large_data。csv”ファイルには、合計2618行と11列のデータが含まれています。 また、df_small変数では、最初の1,000行のデータのみがロードされ、11列もロードされていることも確認できます。

df_small.head()と入力すると、df_smallデータフレーム内の最初の5行のデータが表示されます。 私たちは、この方法で大きなファイルにのぞき見ることができます!

次に、Excelのみを使用してデータファイルを開くことができるようにするにはどうすればよいですか? あなたが知っている、人々はExcelのようなので、我々はそれに固執する必要があります!

マジックを使ってこの8GBのファイルをExcelで開くことはできませんが、小さなファイルに分割することで「分割して征服」することができます。 たとえば、それぞれ1GBの8つのファイル、またはそれぞれ500MBの16つのファイル。 Excelの最新バージョンでは、これらのファイルサイズを簡単に処理できます。

今回は、オプションの引数chunksizeを使用して、dataframeを少し違った方法でロードします。 ここでも、デモの目的のために、我々ははるかに小さいファイルを使用しています。

df = pd.read_csv('large_data.csv', chunksize = 900)

あまり技術的な詳細を説明することなく、chunksize引数を使用すると、データをチャンク単位でロードでき、この例では各チャンクのサイズは900行のデータです。 チャンクの数は、プログラムによって自動的に決定されます。 Csvファイルに2,618行が含まれていると仮定すると、2618/900=2.9となり、合計で3つのチャンクが表示されます。 最初の2つのチャンクには900行が含まれ、最後のチャンクには残りの818行が含まれます。

それが本当かどうか見てみましょう。

小さいデータフレームサイズ

一つのファイルを正常にロードして小さな部分に分割しました。

i = 1for file in df: file.to_csv(f'file_{i}.csv') i += 1
元のファイルを分解して小さなファイルに保存する

すべてをまとめる

import pandas as pd df = pd.read_csv('large_data.csv', chunksize = 900)df_small = pd.read_csv('large_data.csv', nrows = 1000)i = 1for file in df: print(file.shape) file.to_csv(f'file_{i}.csv') i += 1

Excelでは不可能と思われるものを解決するために8行のコードのみを使 私はあなたがPythonを愛し始めていることを願っています!

コメントを残す

メールアドレスが公開されることはありません。