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

【Python Pandas】DataFrameのshapeプロパティで行数・列数を取得し、条件に一致するデータを抽出する方法

はじめに

本記事では、PythonのPandasライブラリを使用して、products.csvファイルからデータを読み込み、DataFrameの行数と列数を出力した後、「product」列の値が「Car」と一致する先頭10行分のデータを抽出して表示するプログラムの作成方法を解説します。

実現したい処理

  • products.csvファイルからデータを読み込む
  • shapeプロパティを使って行数と列数を出力する
  • 先頭10行の中から「product」列の値が「Car」である行を抽出して表示する

products.csvファイルを読み込んだ場合の出力結果は以下のようになります。

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

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

解決策1:ilocを使った方法

手順

  1. products.csvファイルからデータを読み込み、変数dfに代入します。
  2. df.shape[0]で行数、df.shape[1]で列数を取得して出力します。
  3. iloc[0:10,:]を使って、dfから先頭10行を抽出し、df1に代入します。
  4. df1.iloc[:,1]でproduct列(インデックスは1)の値を取得し、「Car」と一致する行を抽出します。
# CSVファイルの読み込み
df = pd.read_csv('products.csv')

# 先頭10行の抽出
df1 = df.iloc[0:10,:]

# product列の値が「Car」と一致する行の抽出
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'])

出力結果

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

解決策2:head()と列名指定を使った方法

手順

  1. products.csvファイルからデータを読み込み、変数dfに代入します。
  2. df.shape[0]で行数、df.shape[1]で列数を取得して出力します。
  3. df.head(10)を使って先頭10行を取得し、df1に代入します。
  4. 列名を直接指定して、「product」列の値が「Car」と一致する行を抽出します。
# CSVファイルの読み込み
df = pd.read_csv('products.csv')

# 先頭10行の抽出
df1 = df.head(10)

# product列の値が「Car」と一致する行の抽出
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'])

出力結果

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

まとめ

今回は、Pandasのshapeプロパティを使ってDataFrameの行数・列数を取得する方法と、ilocによる位置ベースの抽出、head()と列名指定による条件抽出の2つのアプローチを紹介しました。

  • df.shape[0]:行数を取得
  • df.shape[1]:列数を取得
  • df.iloc[0:10,:]:位置指定による先頭10行の抽出
  • df.head(10):先頭10行の取得
  • df[df['product']=='Car']:条件に一致する行の抽出

列名がわかっている場合は、解決策2のように列名で直接指定する方が可読性が高くおすすめです。一方、列の位置を基準にアクセスしたい場合にはilocが便利です。用途に応じて使い分けるとよいでしょう。

  1. 【Python】Pandas DataFrameからサブセット(列の一部)を選択する方法

    Pandas DataFrameのサブセット選択とは? Pandasでは、DataFrameから必要な列や行だけを取り出す操作を「サブセットの選択」と呼びます。大きなデータセットから目的のデータだけを抽出できれば、分析や前処理の効率が大幅に向上します。 この記事では、CSVファイルを読み込んだDataFrameから、1つの列、および複数の列を選択する基本的な方法を解説します。 使用するCSVファイルの内容 今回使用する「SalesData.csv」は、Microsoft Excelで開くと以下のような内容になっています。 CSVファイルからDataFrameを作成する まず、pd.rea

  2. PythonでPandas DataFrameを棒グラフとして可視化する方法

    データ分析において、PandasのDataFrameを視覚的に表現することは非常に重要です。この記事では、CSVファイルから読み込んだデータをmatplotlibを使って棒グラフ(バーチャート)として表示する方法を解説します。 前提条件:サンプルデータ 今回は以下のような内容のCSVファイル(SalesData.csv)を使用します。 Car Reg_Price 0 BMW 2000 1 Lexus 1500 2 Audi 1500 3 Jaguar 2000 4 Mustang