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

【Python Pandas】CSVファイルを読み込み、先頭10行から「product」列が「Car」に一致する行を抽出する方法

この記事では、「products.csv」ファイルを読み込んだうえで、全体の行数・列数を確認し、先頭10行の中から「product」列の値が「Car」に一致するレコードだけを抽出して出力する方法を解説します。

前提となるデータ

今回使用する「products.csv」は、全100行・8列のデータセットです。先頭10行には「product」列が「Car」になっているレコードが複数含まれており、期待される出力は以下のようになります。

Rows: 100 Columns: 8
id  product  engine  avgmileage  price  height_mm  width_mm  productionYear
1   Car      Diesel  21          16500  1530       1735      2020
4   Car      Gas     18          17450  1530       1780      2018
5   Car      Gas     19          15250  1530       1790      2019
8   Car      Diesel  23          16925  1530       1800      2018

この問題に対しては、主に2つの解決策があります。それぞれ順番に見ていきましょう。

解決策1:ilocによる位置指定で抽出する

  • pandasでCSVファイルを読み込み、DataFrame(df)に代入します。

  • df.shape[0]で行数、df.shape[1]で列数を出力します。

  • iloc[0:10,:]を使って先頭10行のみを抽出し、df1に代入します。

  • product列(列インデックスは1)の値が「Car」に一致する行を条件式でフィルタリングし、結果を出力します。

df = pd.read_csv('products.csv')
df1 = df.iloc[0:10,:]
df1[df1.iloc[:,1]=='Car']

コード例

実際のコードを見て、動作を確認してみましょう。

import pandas as pd

df = pd.read_csv('products.csv')
print("Rows:", df.shape[0], "Columns:", df.shape[1])
df1 = df.iloc[0:10, :]
print(df1[df1.iloc[:,1] == 'Car'])

解決策2:head()メソッドと列名指定で抽出する

  • 同じくCSVファイルを読み込み、dfに代入します。

  • df.shapeで行数・列数を出力します。

  • head(10)メソッドで先頭10行を取得し、df1に代入します。

  • 列名「product」を直接指定した条件式で、「Car」に一致する行を抽出します。

df1 = df.head(10)
df1[df1['product']=='Car']

コード例

こちらも実装例を見て理解を深めましょう。

import pandas as pd

df = pd.read_csv('products.csv')
print("Rows:", df.shape[0], "Columns:", df.shape[1])
df1 = df.head(10)
print(df1[df1['product'] == 'Car'])

出力結果

どちらの方法でも、以下のように先頭10行の中から「product」列が「Car」に一致する行のみが出力されます。

Rows: 100 Columns: 8
id  product  engine  avgmileage  price  height_mm  width_mm  productionYear
1   Car      Diesel  21          16500  1530       1735      2020
4   Car      Gas     18          17450  1530       1780      2018
5   Car      Gas     19          15250  1530       1790      2019
8   Car      Diesel  23          16925  1530       1800      2018

2つの方法の使い分けのポイント

解決策1のilocは「位置(インデックス番号)」を基準に行や列を指定するため、列名が事前に分からない場合や、プログラム的に列位置で処理したい場合に便利です。一方、解決策2のhead()+列名指定は、コードの意図が読み取りやすく可読性が高いのが特徴です。列名が明確に分かっている場合は、解決策2のような列名での指定をおすすめします。

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

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

  2. Python・PandasでヘッダーなしのCSVファイルを読み込む方法

    CSVファイルをヘッダー(列名)なしで読み込むには、pandasのread_csv()メソッドでheaderパラメータに「None」を指定します。 ここでは、Microsoft Excelで開いた以下のようなCSVファイル(SalesData.csv)を例に解説します。1行目には「Car」「Reg_Price」「Units」というヘッダーが含まれています。 必要なライブラリのインポート まず、pandasライブラリをインポートします。 import pandas as pd 通常どおりCSVファイルを読み込む headerパラメータを指定せずにCSVファイルを読み込むと、先頭行が自動的にヘッダ