データの操作はプログラミングでは避けられない部分であり、さまざまなファイル形式に深く関わることが多い私は、Python がどのようにプロセス全体を簡素化するかを常に高く評価してきました。
特にデータ分析において定期的に登場するファイル形式の 1 つが CSV ファイルです。
CSV (カンマ区切り値) は、そのシンプルさから人気のあるデータ交換形式です。
幸いなことに、Python には csv と呼ばれる組み込みモジュールが付属しており、これらのファイルの操作が非常に効率的になります。
この記事では、基本的な使用法から、データ処理の時間を大幅に節約できるより高度なテクニックまで、Python での csv モジュールの仕組みを詳しく説明します。
csv モジュールに入る前に、CSV ファイルとは何かについての基本的な理解から始めましょう。
CSV ファイルは基本的にプレーン テキスト ファイルで、各行がデータ行を表し、各値がカンマ (場合によってはタブなどの他の区切り文字) で区切られています。
これはどのような簡単な例です:
Name,Age,Occupation Alice,30,Engineer Bob,25,Data Scientist Charlie,35,Teacher
CSV ファイルは理論的には Python の標準ファイル処理メソッドを使用して読み取ることができる単なるテキスト ファイルであるのに、なぜ csv モジュールが必要なのか疑問に思われるかもしれません。
これは事実ですが、CSV ファイルには、埋め込まれたカンマ、セル内の改行、さまざまな区切り文字など、手動で処理するのが難しい複雑な要素が含まれる場合があります。
csv モジュールはこれらすべてを抽象化し、データに集中できるようにします。
コードに入ってみましょう。
CSV ファイルに対して実行する最も一般的な操作は、その内容を読み取ることです。
モジュール内の csv.reader() 関数は、そのための使いやすいツールです。
これを行う方法についてのステップバイステップのガイドがあります。
基本的な CSV の読み取り
import csv # Open a CSV file with open('example.csv', 'r') as file: reader = csv.reader(file) # Iterate over the rows for row in reader: print(row)
これは CSV ファイルを読み取る最も簡単な方法です。
csv.reader() は反復可能オブジェクトを返します。各反復により、ファイルの行を表すリストが得られます。
ヘッダーの処理
ほとんどの CSV ファイルには、最初の行に列名などのヘッダーが付いています。
これらのヘッダーが必要ない場合は、反復処理時に最初の行を単純にスキップできます:
import csv with open('example.csv', 'r') as file: reader = csv.reader(file) # Skip header next(reader) for row in reader: print(row)
役立つデータと無関係なデータが混在するファイルを操作していると、ヘッダー以外の部分に基づいて行をスキップしていることに気づくことがあります。
これは for ループ内で簡単に実行できます。
DictReader: CSV ファイルを読み取るためのより直感的な方法
CSV ファイルにヘッダーがある場合、 csv.DictReader() は、列名をキーとして各行を辞書として読み取るもう 1 つの素晴らしいオプションです:
import csv with open('example.csv', 'r') as file: reader = csv.DictReader(file) for row in reader: print(row)
このアプローチにより、特に大規模なデータセットを扱う場合に、コードがより読みやすく直感的になりやすくなります。
たとえば、row['Name'] へのアクセスは、row[0].
のようなインデックスベースのアクセスを扱うよりもはるかにわかりやすく感じられます。データを読み取って処理したら、おそらくそれを保存またはエクスポートしたくなるでしょう。
csv.writer() 関数は、CSV ファイルに書き込むための頼りになるツールです。
基本的な CSV の書き方
import csv # Data to be written data = [ ['Name', 'Age', 'Occupation'], ['Alice', 30, 'Engineer'], ['Bob', 25, 'Data Scientist'], ['Charlie', 35, 'Teacher'] ] # Open a file in write mode with open('output.csv', 'w', newline='') as file: writer = csv.writer(file) # Write data to the file writer.writerows(data)
writer.writerows() 関数は、リストのリストを取得して CSV ファイルに書き込みます。各内部リストはデータ行を表します。
DictWriter: CSV ファイルを作成するためのよりクリーンな方法
CSV ファイルを辞書に読み取るための DictReader があるのと同じように、CSV に辞書を書き込むための DictWriter があります。
このメソッドは、列名を明示的に指定する場合に特に便利です。
import csv # Data as list of dictionaries data = [ {'Name': 'Alice', 'Age': 30, 'Occupation': 'Engineer'}, {'Name': 'Bob', 'Age': 25, 'Occupation': 'Data Scientist'}, {'Name': 'Charlie', 'Age': 35, 'Occupation': 'Teacher'} ] # Open file for writing with open('output.csv', 'w', newline='') as file: fieldnames = ['Name', 'Age', 'Occupation'] writer = csv.DictWriter(file, fieldnames=fieldnames) # Write the header writer.writeheader() # Write the data writer.writerows(data)
DictWriter を使用すると、コードを読みやすく簡潔に保ちながら、CSV に辞書を書き込むための優れたクリーンなインターフェイスが得られます。
デフォルトでは、CSV モジュールはカンマを使用して値を区切りますが、タブやセミコロンなどの他の区切り文字を使用するファイルを操作している場合もあります。
csv モジュールは、区切り文字引数を指定することで、これらのケースを簡単に処理する方法を提供します。
import csv with open('example_tab.csv', 'r') as file: reader = csv.reader(file, delimiter='\t') for row in reader: print(row)
カンマの代わりにセミコロンを使用する CSV ファイル (通常はヨーロッパのソースからのもの) を見つけましたが、Python の csv モジュールがこれを簡単に処理できることを知って安心しました。
カンマ、タブ、その他の区切り文字であっても、csv モジュールが対応します。
データのフィールド内にカンマ、引用符、さらには改行が含まれている場合はどうなりますか?
CSV モジュールは、引用メカニズムを使用してこのようなケースを自動的に処理します。
引用パラメーターを使用して、引用の動作を制御することもできます。
import csv data = [ ['Name', 'Occupation', 'Description'], ['Alice', 'Engineer', 'Works on, "cutting-edge" technology'], ['Bob', 'Data Scientist', 'Loves analyzing data.'] ] with open('complex.csv', 'w', newline='') as file: writer = csv.writer(file, quoting=csv.QUOTE_ALL) writer.writerows(data)
この例では、QUOTE_ALL により、すべてのフィールドが引用符で囲まれるようになります。
その他の引用オプションには csv.QUOTE_MINIMAL、csv.QUOTE_NONNUMERIC、csv.QUOTE_NONE があり、CSV データの形式を完全に制御できます。
長年にわたり、私はデータを移動するための軽量で効率的な方法として CSV 形式に依存するようになりました。Python の csv モジュールは、その旅において信頼できる相棒となってきました。
単純なスプレッドシートを扱う場合でも、複雑な複数行のデータ フィールドを扱う場合でも、このモジュールを使用すると、プロセスが直感的で楽になります。
CSV の操作は最初は平凡な作業のように思えるかもしれませんが、データ操作をマスターするための入り口です。
私の経験では、CSV を一度克服すると、JSON や SQL データベースのような、より大規模で複雑な形式に自信を持って取り組むことができるようになります。結局のところ、すべては基礎から始まります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3