Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでCSVファイルを読み込み、最後の2行の合計を出力する3つの方法

Pythonとpandasライブラリを使えば、CSVファイルからデータを読み込み、最後の2行の合計を簡単に計算できます。この記事では、3つの異なるアプローチを具体的なコード例とともに解説します。

準備:サンプルCSVファイル

まず、以下のようなデータが含まれたCSVファイルを用意し、「pandas.csv」という名前で保存してください。

pandas.csv

Id,Data
1,11
2,22
3,33
4,44
5,55
6,66
7,77
8,88
9,99
10,100

このファイルに対して処理を実行すると、最後の2レコード(Id: 9と10、Data: 99と100)の合計は次のようになります。

最後の2行の合計:
Id    19
Data  199

解決策1:tail()メソッドを使う方法

pandasのtail()メソッドは、データフレームの末尾から指定した行数を取得できる便利な関数です。

  • 以下のコードでCSVファイルからデータを読み込み、変数dataに格納します。

data = pd.read_csv('pandas.csv')
  • 読み込んだデータをデータフレームに変換し、dfに保存します。

df = pd.DataFrame(data)
  • tail(2)で最後の2レコードを取得し、sum()で各列の合計を計算します。

df.tail(2).sum()

実装例

実際の動作を確認するために、以下のコードを実行してみましょう。

import pandas as pd
data = pd.read_csv('pandas.csv')
df = pd.DataFrame(data)
print("Dataframe is\n", df)
print("Last two rows\n", df.tail(2).sum())

出力

Dataframe is
 Id Data
0 1 11
1 2 22
2 3 33
3 4 44
4 5 55
5 6 66
6 7 77
7 8 88
8 9 99
9 10 100
Last two rows
Id     19
Data   199

解決策2:ilocによるスライシングを使う方法

位置ベースのインデックス参照が可能なilocを使っても、同じ結果が得られます。

  • CSVファイルからデータを読み込みます。

data = pd.read_csv('pandas.csv')
  • データフレームに変換します。

df = pd.DataFrame(data)
  • 負のインデックスを使ったスライスで、最後の2レコードを取得します。

df.iloc[-2:]

実装例

import pandas as pd
data = pd.read_csv('pandas.csv')
df = pd.DataFrame(data)
print("Dataframe is\n", df)
print("Last two rows\n", df.iloc[-2:].sum())

出力

Dataframe is
 Id Data
0 1 11
1 2 22
2 3 33
3 4 44
4 5 55
5 6 66
6 7 77
7 8 88
8 9 99
9 10 100
Last two rows
Id     19
Data   199

解決策3:forループとif条件を使う方法

ライブラリの便利なメソッドに頼らず、基本的なループ処理で合計を求めることもできます。

  • CSVファイルからデータを読み込み、データフレームに変換します。

data = pd.read_csv('pandas.csv')
df = pd.DataFrame(data)
  • id_sumとdata_sumの初期値を0に設定します。

  • forループでデータフレームの各行にアクセスし、if条件で最後の2行だけを処理対象にします。

for i in range(len(df)):
    if(i==len(df)-2 or i==len(df)-1):
  • df.iloc[i][0]df.iloc[i][1]を使って、それぞれ1列目(Id)と2列目(Data)の合計を計算します。

id_sum = id_sum + df.iloc[i][0]
data_sum = data_sum + df.iloc[i][1]

実装例

import pandas as pd
data = pd.read_csv('pandas.csv')
df = pd.DataFrame(data)
id_sum = 0
data_sum = 0
for i in range(len(df)):
    if(i==len(df)-2 or i==len(df)-1):
        id_sum = id_sum + df.iloc[i][0]
        data_sum = data_sum + df.iloc[i][1]
print("Id", id_sum)
print("Data", data_sum)

出力

Id     19
Data   199

まとめ

最もシンプルで推奨されるのは解決策1のtail()を使う方法です。コードの可読性が高く、意図が明確だからです。また、大規模なデータを扱う場合は、forループによる逐次処理よりも、tail()やilocといったベクトル化された操作の方が高速に動作する点も覚えておきましょう。

  1. C言語でファイルからデータを読み込み、表形式で表示するプログラムの作成方法

    問題C言語を使って、ファイルに保存されている一連のデータ項目を読み取り、それをコンソール上に列(表)形式で表示するには、どのようにプログラムを書けばよいのでしょうか。 解決策まずファイルを書き込みモードで開き、一連の情報を書き込んだ後にファイルを閉じます。その後、再度同じファイルを読み込みモードで開き、データをコンソール上に列形式で表示します。 ファイルを書き込みモードで開く FILE *fp; fp = fopen(sample.txt, w); 指定したファイルが存在しない場合は、新しいファイルが作成されます。 ファイルがすでに存在する場合は、以前の内容は消去され、新しく書き込まれた内容

  2. JavaでCSVファイルを読み込む方法|BufferedReaderによる基本的なデータ読み取り手順

    CSVとは「Comma Separated Values(カンマ区切り値)」の略で、テキスト形式のデータファイルの一種です。CSVファイルでは、1行ごとに複数の項目がカンマ(,)で区切られて記録されており、拡張子は「.csv」として保存されます。表形式のデータを扱う際に広く利用されている、シンプルで汎用性の高いフォーマットです。 JavaでCSVファイルを読み込む仕組み JavaでCSVファイルを読み込むには、BufferedReaderクラスのreadLine()メソッドを使用するのが基本的な方法です。このメソッドを使うと、ファイルの内容を1行ずつ順番に読み取ることができます。 読み取った各