データサイエンスに必要なCSVの読み取りおよび書き込み操作の詳細な説明

この記事では、CSVファイルの基本について説明します。したがって、インポートされたデータの処理に関しては、ほとんどのCSVの読み取り、処理、および書き込みタスクは、基本的なPythoncsvライブラリで簡単に処理できます。大量のデータを読み取って処理する場合、pandasライブラリは高速で簡単なCSV処理も提供します。
ここに画像の説明を挿入

CSVファイルとは

CSVファイル(カンマ区切り値ファイル)は、特定の構造を使用して表形式のデータを配置するプレーンテキストファイルです。プレーンテキストファイルであるため、実際のテキストデータ、つまり印刷可能なASCII文字またはUnicode文字のみを含めることができます。

通常、CSVファイルの構造は、特定の各データ値をコンマで区切って名前で指定されます。

column 1 name,column 2 name, column 3 name
first row data 1,first row data 2,first row data 3
second row data 1,second row data 2,second row data 3
...

各データをコンマで区切る方法。最初の行はデータ列の名前であり、空の場合もあります。最初の行は実際のデータです。その後の各行は実際のデータであり、ファイルサイズによってのみ制限されます。

CSVファイルはどこから来たのですか?

CSVファイルは、多くの場合、大量のデータを処理するプログラムによって作成されます。スプレッドシートやデータベースからデータをエクスポートし、他のプログラムにインポートします。たとえば、データマイニングプログラムの結果をCSVファイルとしてエクスポートし、スプレッドシートにインポートして、データの分析、プレゼンテーション用のグラフの生成、または公開用のレポートの作成を行うことができます。

CSVファイルはプログラムで非常に簡単に操作できます。Pythonなど、テキストファイルの入力と文字列の操作をサポートする言語であれば、CSVファイルを直接処理できます。

CSVファイルを解析するためのCSVライブラリ

csvライブラリは、CSVファイルを読み書きするための機能を提供します。Excelで生成されたCSVファイルですぐに使用できるように設計されており、さまざまなCSV形式に適応します。csvライブラリには、CSVファイルからのデータの読み取り、書き込み、および操作のためのオブジェクトとその他のコードが含まれています。
ここに画像の説明を挿入

CSVファイルを読む

CSVファイルは、ファイルオブジェクトを返すPythonの組み込みopen()関数を使用してテキストファイルとして開かれます。次に、CSVファイルからの読み取りはリーダーオブジェクトを使用して行われます。

employee_birthday.txt

name,department,birthday month
John Smith,Accounting,November
Erica Meyers,IT,March

直接読み取り方式。

import csv

with open('employee_birthday.txt') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            print(f'Column names are {
      
      ", ".join(row)}')
            line_count += 1
        else:
            print(f'\t{
      
      row[0]} works in the {
      
      row[1]} department, and was born in {
      
      row[2]}.')
            line_count += 1
    print(f'Processed {
      
      line_count} lines.')

辞書モードで読み取る方法。

import csv

with open('employee_birthday.txt', mode='r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            print(f'Column names are {
      
      ", ".join(row)}')
            line_count += 1
        print(f'\t{
      
      row["name"]} works in the {
      
      row["department"]} department, and was born in {
      
      row["birthday month"]}.')
        line_count += 1
    print(f'Processed {
      
      line_count} lines.')

最終的な出力は同じです。

Column names are name, department, birthday month
    John Smith works in the Accounting department, and was born in November.
    Erica Meyers works in the IT department, and was born in March.
Processed 3 lines.

CSVリーダーパラメーター

リーダーオブジェクトは、追加のパラメーターを指定することにより、さまざまなスタイルのCSVファイルを処理できます。

  • 区切り文字は、各フィールドを区切るために使用される文字を指定します。デフォルトはコンマ('、')です。
  • quotecharは、区切り文字を含むフィールドを囲むために使用される文字を指定します。デフォルトは二重引用符('"')です。
  • エスケープ文字は、引用符が使用されていない場合に区切り文字をエスケープするために使用される文字を指定します。デフォルトでは、エスケープ文字はありません。

employee_addresses.txt

name,address,date joined
john smith,1132 Anywhere Lane Hoboken NJ, 07030,Jan 4
erica meyers,1234 Smith Lane Hoboken NJ, 07030,March 2

このCSVファイルには、名前、住所、結合日という3つのフィールドがコンマで区切られて含まれています。問題は、住所フィールドのデータに郵便番号を表すコンマも含まれていることです。

これに対処する方法を考えますか?

CSVファイルの書き込み

CSVファイルの書き込みは、 .write_row()メソッドを使用して実行できます。

import csv

with open('employee_file.csv', mode='w') as employee_file:
    employee_writer = csv.writer(employee_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

    employee_writer.writerow(['John Smith', 'Accounting', 'November'])
    employee_writer.writerow(['Erica Meyers', 'IT', 'March'])

quotecharは、あいまいさを排除するために特殊文字を含むフィールドを囲むために使用されます。

引用コントロールの引用動作のいくつかのケース:

  • csv.QUOTE_NONNUMERIC)#非数値引用符
  • csv.QUOTE_ALL#すべてのフィールドが引用符で囲まれています
  • csv.QUOTE_MINIMAL#特別なフィールドを引用します
  • csv.QUOTE_NONE#引用符なし

辞書が書かれています。

import csv

with open('employee_file2.csv', mode='w') as csv_file:
    fieldnames = ['emp_name', 'dept', 'birth_month']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({
    
    'emp_name': 'John Smith', 'dept': 'Accounting', 'birth_month': 'November'})
    writer.writerow({
    
    'emp_name': 'Erica Meyers', 'dept': 'IT', 'birth_month': 'March'})

employee_file2.csv

emp_name,dept,birth_month
John Smith,Accounting,November
Erica Meyers,IT,March

pandasライブラリを使用してCSVファイルを解析します

pandasは、データ、コード、分析結果、視覚化、およびナラティブテキストを共有するための高性能データ分析ツールと使いやすいデータ構造を提供するオープンソースのPythonライブラリです。
ここに画像の説明を挿入

パンダはCSVファイルを読みます

hrdata.csv

Name,Hire Date,Salary,Sick Days remaining
Graham Chapman,03/15/14,50000.00,10
John Cleese,06/01/15,65000.00,8
Eric Idle,05/12/14,45000.00,10
Terry Jones,11/01/13,70000.00,3
Terry Gilliam,08/12/14,48000.00,7
Michael Palin,05/23/13,66000.00,8

パンダを使用してすばやく読みます。

import pandas
df = pandas.read_csv('hrdata.csv')
print(df)

             Name Hire Date   Salary  Sick Days remaining
0  Graham Chapman  03/15/14  50000.0                   10
1     John Cleese  06/01/15  65000.0                    8
2       Eric Idle  05/12/14  45000.0                   10
3     Terry Jones  11/01/13  70000.0                    3
4   Terry Gilliam  08/12/14  48000.0                    7
5   Michael Palin  05/23/13  66000.0                    8

パンダでデータを読み取るときに、日付形式をフォーマットできます。

import pandas
df = pandas.read_csv('hrdata.csv', index_col='Name', parse_dates=['Hire Date'])
print(df)
                Hire Date   Salary  Sick Days remaining
Name                                                   
Graham Chapman 2014-03-15  50000.0                   10
John Cleese    2015-06-01  65000.0                    8
Eric Idle      2014-05-12  45000.0                   10
Terry Jones    2013-11-01  70000.0                    3
Terry Gilliam  2014-08-12  48000.0                    7
Michael Palin  2013-05-23  66000.0                    8

パンダはCSVファイルに書き込みます

パンダに読み込まれたコンテンツは、新しいcsvファイルに直接書き込むことができます。

import pandas
df = pandas.read_csv('hrdata.csv', 
            index_col='Employee', 
            parse_dates=['Hired'],
            header=0, 
            names=['Employee', 'Hired', 'Salary', 'Sick Days'])
df.to_csv('hrdata_modified.csv')

print(df)
Employee,Hired,Salary,Sick Days
Graham Chapman,2014-03-15,50000.0,10
John Cleese,2015-06-01,65000.0,8
Eric Idle,2014-05-12,45000.0,10
Terry Jones,2013-11-01,70000.0,3
Terry Gilliam,2014-08-12,48000.0,7
Michael Palin,2013-05-23,66000.0,8

おすすめ

転載: blog.csdn.net/qq_20288327/article/details/124097783