python逆引き:csvデータを読み込みたい

備忘録ヘッダ画像 逆引きソースコード

CSV(Comma-Separated Values)ファイルを読み込みこむコード例を記載する。
このページのコード内に登場するdata.csvファイルは以下の構造で動作確認をとっている。

商品名,個数,単価
りんご,2,100
みかん,3,80
もも,4,120
いちご,5,50
なし,6,150

csvモジュールを使って読む場合

Python組み込みのcsvモジュールを使用するシンプルな例を記載する。

リストに読み込む

import csv

# CSVファイルのパス
csv_file_path = 'data.csv'

# CSVファイルを読み込み、リストとして保存する
csv_data = []
with open(csv_file_path, newline='', encoding='utf-8') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        csv_data.append(row)

# 読み込んだCSVデータを表示
for row in csv_data:
    print(row)
実行結果
['\ufeff商品名', '個数', '単価']
['りんご', '2', '100']
['みかん', '3', '80']
['もも', '4', '120']
['いちご', '5', '50']
['なし', '6', '150']

csvモジュールを使用してCSVファイルを開き、csv.reader()関数でファイルを読み込んでいる。そして、各行をリストに追加し、最後にそのリストを表示する。必要に応じて、CSVファイルのエンコーディングや区切り文字を変更することもできる。
また、csv.DictReader()を使用すると辞書形式でデータを読み込むことも可能。ちなみに先頭の\ufeffはUnicodeエスケープシーケンスの一部で、UTF-8エンコーディングのBOM(Byte Order Mark)を表している。BOMは、テキストファイルの先頭に配置され、そのファイルがUTF-8でエンコードされていることを示す。

pandasモジュールを使う場合

周りのエンジニアを見るに、こちらのpandasライブラリを使用する人が多い印象。

モジュールのインストール

pip install pandas

読み込む

import pandas as pd

# CSVファイルのパス
csv_file_path = 'data.csv'

# CSVファイルをDataFrameとして読み込む
df = pd.read_csv(csv_file_path)

# DataFrameを表示
print(df)
実行結果
   商品名  個数   単価
0  りんご   2  100
1  みかん   3   80
2   もも   4  120
3  いちご   5   50
4   なし   6  150

pandasread_csv()関数を使用してCSVファイルをDataFrameとして直接読み込んでいる。

pandasで読み込んだデータを処理する

csvファイルを読み込んだら、当然何らかの処理をしたい。
以下にDataFrameを使った場合の処理例をいくつか記載しておく。

列と列をかける

個数列と単価列を使って各商品の合計価格を求めてみる。

import pandas as pd

# CSVファイルを読み込む
df = pd.read_csv('data.csv')

# 各商品の合計価格を計算する
df['合計価格'] = df['個数'] * df['単価']

# 合計価格の列を表示
print(df)
実行結果
   商品名  個数   単価  合計価格
0  りんご   2  100   200
1  みかん   3   80   240
2   もも   4  120   480
3  いちご   5   50   250
4   なし   6  150   900

DataFrameの列名を直接指定して、それぞれの列の配列を取得している。
このようにして列名を指定してアクセスすることで、特定の列のデータを取得し処理できる。

列の合計を求める

import pandas as pd

# CSVファイルを読み込む
df = pd.read_csv('data.csv')

# 各商品の合計価格を計算
df['合計価格'] = df['個数'] * df['単価']

# 売上合計を計算
total_sales = df['合計価格'].sum()

# 各商品の合計価格と売上合計を表示
print("各商品の合計価格:")
print(df)
print("\n売上合計:", total_sales)
実行結果
各商品の合計価格:
   商品名  個数   単価  合計価格
0  りんご   2  100   200
1  みかん   3   80   240
2   もも   4  120   480
3  いちご   5   50   250
4   なし   6  150   900

売上合計: 2070

まずCSVファイルを読み込んでDataFrameに変換し、各商品の合計価格を計算するための新しい列'合計価格'を追加している。その後、sum()メソッドを使用して合計価格の列から売上合計を計算している。

読みたくない行列を読み飛ばす

read_csv()skiprowsusecolsパラメータを使用できる。

import pandas as pd

# CSVファイルを読み込む際に1行目と1列目を読み飛ばして、2行目以降と2列目以降のデータを取得する
df = pd.read_csv('data.csv', skiprows=[0], usecols=range(1, 3))

# データを表示
print(df)
実行結果
   2  100
0  3   80
1  4  120
2  5   50
3  6  150

skiprowsパラメータに[0]を指定することで1行目を読み飛ばし、usecolsパラメータにrange(1, 3)を指定することで1列目を読み飛ばして2行目以降と2列目以降のデータを取得している。この場合テスト用のデータだと”2″と”100″が列名になる。

列番号を指定して取得する

iloc[]loc[]といったメソッドを使用してインデックスを使って列を指定することができる。

import pandas as pd

# CSVファイルを読み込む
df = pd.read_csv('data.csv')

# iloc[]を使用して列を指定する
個数列 = df.iloc[:, 1]  # 個数列を取得する
単価列 = df.iloc[:, 2]  # 単価列を取得する

# loc[]を使用して列を指定する
個数列 = df.loc[:, '個数']  # 個数列を取得する
単価列 = df.loc[:, '単価']  # 単価列を取得する

ソートする

sort_values()メソッドを使用できる。これにより、指定した列の値に基づいて行がソートされる。

import pandas as pd

# CSVファイルを読み込む
df = pd.read_csv('data.csv')

# '個数'列を基準に降順でソートする
sorted_df = df.sort_values(by='個数', ascending=False)

# ソートされたDataFrameを表示
print(sorted_df)
実行結果
   商品名  個数   単価
4   なし   6  150
3  いちご   5   50
2   もも   4  120
1  みかん   3   80
0  りんご   2  100

このコードでは、sort_values()メソッドを使用して、’個数’列を基準にDataFrameをソートしている。byパラメータに列名を指定することで、どの列を基準にソートするかを指定する。
デフォルトでは昇順でソートされるが、ascending=Falsesort_values()に渡すことで降順でソートすることができる。

特定の条件に一致する行だけ抜き出す

DataFramequery()メソッドや条件式を使用する方法など、いくつかの方法がある。

query()メソッドを使用する方法

# 条件に一致する行を抽出
filtered_df = df.query('個数 > 3')

条件式を使用する方法

# 条件に一致する行を抽出
filtered_df = df[df['個数'] > 3]

‘個数’列が3より大きい行のみを抽出する例

条件式を変更することで、特定の条件に一致する行を抽出することができる。
queryを使って個数が3個以上の行を抜き出すコード例を記載しておく。

import pandas as pd

# CSVファイルを読み込む
df = pd.read_csv('data.csv')

df = df.query("個数 > 3")

print(df)
実行結果
   商品名  個数   単価
2   もも   4  120
3  いちご   5   50
4   なし   6  150
タイトルとURLをコピーしました