【Python】CSV書き込みに挑戦!列を追加し計算することも可能です

みなさん、こんにちはケンケンです。

 

前回は、PythonでCSVファイルを読み込む方法をご紹介しました。

前回記事

みなさん、こんにちはケンケンです。   実務で良く使うCSV形式のファイルですが、CSVは正確には「Comma-Separated Values」といいます。 複数の値をコンマで区切ったテキスト形式のファイルのこ[…]

 

今回は、読み込みではなく書き込む方法をご紹介します。

今回もpandasモジュールを使うのでライブラリをインストールしておいてください。

それでは、行ってみましょう。

 

CSVに書き込んでみよう

CSVに書き込むときに重要になってくるのが、適切な文字コードを取得できるかどうかです。

それぞれのOSに合った文字コードを取得しないとCSVに書き込んだ時に文字化けしてしまいます。

 

localモジュールをインストールしよう

それを、一発で解消してくれるのがlocaleモジュールです。

まずは以下のようにインストールします。

 

▶localeのインストール(コマンドプロンプト)

>>>py -m pip install locale

localeモジュールを使って適切な文字コードを取得するには、

getpreferredencoding()という長いメソッドを使います。

このメソッドでOSの文字コードを取得してみましょう。

文字コードを取得してみよう

▶文字コードを取得する(encoding.py)

import locale

encoding = locale.getpreferredencoding()
print(encoding)

localeモジュールをインポートしてgetpreferredencodingメソッドで文字コードを取得します。

プログラムを実行し文字コードを表示してみると以下のようになりました。

「cp932」という文字コードを使っているようです。

これはWindowsが指定している文字コードです。

詳しい解説は割愛しますが、これで文字コードを取得することができました。

順調です。

 

データをCSVに書き込んでみよう

次は、書き込むデータを辞書形式で作成します。

書き込み実行までのコードを一気に書いちゃいましょう。

▶CSVに書き込む(writecsv.py)

import locale
import pandas as pd

encoding = locale.getpreferredencoding()
data = {
    '氏名': ['吉田義男','鈴木京子','田中隆','江藤淳','三田紀子'],
    '売上': ['1000','2000','3000','2500','1500'],
    '経費': ['500','1200','1800','2000','1600'],
    }

df = pd.DataFrame(data)
df.to_csv('seles_cost2.csv', encoding = encoding)

辞書の構成ですが、キーを列の見出しにして、値をキーに対応させています。また、値はリスト形式にしています。

辞書については以下で詳しく説明していますので参考にしてください。

辞書関連記事

みなさん、こんにちはケンケンです。   Pythonの基本事項についてお伝えしています。 前回は、リストとタプルについてお話ししました。 前回の記事は以下から確認ください。 [sitecard sub[…]

 

辞書にまとめたものを、変数dataに格納し、次行「pd.DataFrame(data)」で

DataFrameオブジェクトに変換しています。

 

この工程を経ることで次のto_csv()メソッドを実行することができます。

最終行でメソッドの引数にファイル名と文字コードを指定しています。

それでは、実行して作成されたファイルの中身を見てみましょう。

CSV形式でデータを書き込むことができました。

引数encodingに値を何もいれないと文字化けする可能性があります。

みなさんも引数encodingを削除して試してみてください。

そして、文字コードの取得は地味に重要なんだということを認識しておいてください。

 

列を追加して書き出す方法

もともとあったCSVデータを読み込んで、一部加工して書き出したいときがあります。

そんなときに列を追加してCSVに書き出す方法があるので紹介します。

下図のようにCSVファイルを用意します。

このファイルを読み込んで、利益列を追加して新しいファイルに書き込みます。

この方法を使うと元データを変更することなく、

作りたいファイルを生成することができるのでセキュリティ的にも適しています。

それでは、具体的にコードを書きましょう。

 

列を追加するときのコードを書こう

▶列を追加してCSVに書き込む(writecsv2.py)

import locale
import pandas as pd

encoding = locale.getpreferredencoding()

df = pd.read_csv('seles_cost.csv', encoding = 'utf-8', header = 0)
df['利益'] = df['売上']-df['経費']
df.to_csv('add_column.csv', index = False, columns=['氏名','売上','経費','利益'],encoding=encoding)

文字コードを取得してCSVファイルを読み込むところまでは問題ないかと思います。

読み込みの復習をしたい方は前回の記事をご覧ください。

 

「df[‘利益’] = df[‘売上’]-df[‘経費’]」という式を追加することで列同士の四則演算ができます。

新たに加えたい列名「利益」を左辺にもっていき、右辺で計算方法を指定するだけです。

最終行の「columns」の部分で表示したい列名を順番に指定することができます。

それでは、実行して生成されたファイルを確認してみましょう。

 

 

いかがですか。

利益列が追加され、計算もできていますね。

なお、補足ですが、文字コードについては、utf-8で読み込んだものをcp932で書き込んでいます。

 

まとめ

今回まででCSV形式のファイルの読み込みと書き込みを紹介しました。

CSVファイルは今やデファクトスタンダードといってよいほど多くのシーンで活用されています。

そのCSVをPythonで操れるように学習しておくことは効果と効率の面で大変得なことだと思います。

本記事では基礎的な部分にしか触れていませんが、当然Excelと連携することなども可能なので、

みなさんもいろいろ試してみてください。

次回からは、テキストデータ全般について紹介していけたらと思います。

それでは、また次回お会いしましょう。

 

おすすめ記事

【Pythonテクニック習得編】インターネットの世界にダイビング【Requestsモジュールの最も簡単な使い方】

Pythonでアイキャッチを作ってみよう【Pillowライブラリで画像編集】