pandas PR

【キーワード抽出可能】pythonのpandasで要素を抽出する方法(iloc,locなど)

python pandas 要素の抽出
記事内に商品プロモーションを含む場合があります

Pandasのデータフレームで任意の行・列を指定してデータを取得・変更する方法について解説していきます

機械学習やデータ分析の際には、前処理の段階で、条件にあう特定データの行・列を抽出する場合などに使用することが多いです。

また、GUIとして、キーワードを入力しておき、csvを読みこませることで、そのキーワードに合致するデータ抽出の方法についても解説していきたいと思います。

完成のイメージはこんな感じです

pandasキーワード抽出

pandasとは

まずpandasについて簡単に説明を入れておきます

pandasというのは、pythonにおいて表形式になっており、データ分析を効率的に行うためのライブラリです

csvファイルなどの読み込み・集計・加工・可視化などが可能です

pandas概要

pandasで要素を抽出する方法

pandasで要素を抽出する方法は4種類です

  • loc:スライス表記で、ラベル名を指定(複数可能)
  • iloc:行もしくは列番号を指定(複数可能)
  • at:ラベル名を指定(単独)
  • iat:行もしくは列番号を指定(単独)

大きく分けると上記の4種類になります

処理速度は単独抽出のat,iatが速いです

まずはpandasでcsvファイルを読み込みます

import pandas as pd

#pandasでcsvファイルの読み込み
file=pd.read_csv('XXXXXXX.csv',index_col=0)

#読み込んだcsvのインデックスとカラム名を出力
print(file.index.values)
print(file.columns.values)

 

 

pandas要素の抽出例

読み込んだcssvファイルの中身

csvのカラム名

インデックスとカラム名

at,iatで要素の抽出

atはラベル名を指定します

atのドキュメント

データ抽出だけではなく、その位置に新たな値を設定することも可能です

import pandas as pd

#pandasでcsvファイルの読み込み
file=pd.read_csv('XXXXXXX.csv',index_col=0)

#AのhipflexROMを指定して出力
print(file.at['A','hipflexROM'])
>>>95

#atを使用して、AのhipflexROMを95から120に書き換え
file.at['A','hipflexROM']=120

#再度AのhipflexROMを指定して出力
print(file.at['A','hipflexROM'])
>>>120

iatは行番号・列番号を指定して、要素を抽出します

iatのドキュメント

at同様、iatはデータ抽出だけではなく、その位置に新たな値を設定することも可能です

import pandas as pd

#pandasでcsvファイルの読み込み
file=pd.read_csv('XXXXXXX.csv',index_col=0)

#iatを使用して、行番号・列番号を指定(1行目の0列目)して出力
print(file.iat[1,0])
>>>100

#iatを使用して、新たな値120に書き換え
file.iat[1,0]=120

#再度iatを使用して、行番号・列番号を指定(1行目の0列目)して出力
print(file.iat[1,0])
>>>120

iatを使用する場合は、行番号・列番号ともに「0」始まり

loc,ilocを使用して単独もしくは複数の要素を抽出

loc,ilocは単独だけではなく、複数の要素を抽出することも可能

locでは行名と列名で要素を指定します

locのドキュメント

ilocのドキュメント

import pandas as pd

#pandasでcsvファイルの読み込み
file=pd.read_csv('XXXXXXX.csv',index_col=0)

#locを使用して、行名・列名を指定して出力
print(file.loc['A','hipflexROM'])
>>>95

#ilocを使用して、行番号・列番号を指定して出力(1行目・0列目)
print(file.iloc[1,0])
>>>100

#locを使用して、AのhipflexROMを150に書き換え
file.loc['A','hipflex']=150

#再度locを使用して、行名・列名を指定して出力
print(file.loc['A','hipflexROM'])
>>>150

#ilocを使用して、1行目の0列目を150に書き換え
file.iloc[1,0]=150

#再度ilocを使用して、行番号・列番号を指定して出力(1行目・0列目)
print(file.iloc[1,0])
>>>150

#AからF行目までのhipflexROMを出力
print(file.loc['A':'F','hipflexROM'])
>>>
ID
A     95
B    100
C    110
D     85
E     70
F     65

#0から3行目のhipflexROMからhipabdROMまでを出力
print(file.iloc[:3,[0,2]])
>>>
    hipflexROM  hipabdROM
ID                       
A           95       15.0
B          100       15.0
C          110       10.0

複数の要素を抽出する方法

複数の要素を抽出する場合には、

#AからF行目までのhipflexROMを出力
print(file.loc['A':'F','hipflexROM'])

#0から3行目のhipflexROMからhipabdROMまでを出力
print(file.iloc[:3,[0,2]])

上記のようなスライス表現を用います

スライス表現では、start:stop:stepの順に要素を指定して、抽出を行なっていきます

ilocでスライス表現をする場合には、stepは省略になりますが、locを使用する場合にはstepまで記載しないとエラーになることもあります

またリストでの表現でも可能です[a,b,c…]のように表現することでも、複数の要素を抽出することができます

外部からキーワードを入力して要素を抽出する

GUIに実装する場合などには、外部からキーワードを入力して、要素を抽出することも可能です

import pandas as pd
import tkinter as tk
import os
from tkinter import filedialog 
from scipy import stats

root=tk.Tk() 
root.title("test")
root.geometry("800x600")

frame=tk.Frame()
frame.grid(row=0)
var=tk.StringVar()
var1=tk.StringVar()
text=tk.Entry(width=20,textvariable=var)
text.place(x=500,y=100)

listbox=tk.Listbox(frame,height=30,selectmode="single")
listbox.grid(row=1,column=1)

def fileselect():
    global var
    type = [("CSV file", "*.csv")]
    file_path = tk.filedialog.askopenfilename(filetypes = type, initialdir = os.getcwd ())  
    csv_file = pd.read_csv(file_path, engine="python", index_col=None)
    i = var.get()
    if i in csv_file.columns:
        word = csv_file.loc[:,i].values
        listbox.insert(tk.END,word)

    
Button=tk.Button(frame,text="selectfile",command=fileselect,width=20)
Button.grid(row=3,column=1)

root.mainloop()

サンプルの動画ではボタンが2種類、リストボックスが2つになっていますが、
こちらのサンプルコードでは、それぞれ1つずつに変更をしています

    if i in csv_file.columns:
        word = csv_file.loc[:,i].values
        listbox.insert(tk.END,word)

上記コードを増やせば、抽出する項目を増やすことも可能です

その際にはグローバル関数も増やし、i=var.get()も増やしておく必要がありますので、注意してください

もし、グローバル関数を使わずに実装することができた方がいたら、DMやコメントをもらえると嬉しいです!

ixを使用した要素の抽出

ixを使用することで、公式ドキュメントでは非推奨となっているため、割愛しました

公式ドキュメント

公式ドキュメントは英語で書かれていますが、Google Chromeでページを開けば、翻訳してくれますので、参考にしてみてください

また、Qiitaではixを使用した時の困った例が挙げられています

python参考書籍

おすすめプログラミングスクール

DMMWEBCAMP
  • WEBCAMPはコスパ最強
  • WEBCAMPは初心者に優しい充実したサポート付き
  • 16週間プランを選択して、返金してもらおう
WEBCAMPの公式ページはこちら WEBCAMPの口コミ・評価はこちら
テックアカデミー  
  • テックアカデミーは費用対効果抜群
  • テックアカデミーのサポートは個人の能力に応じつつ、python初心者に優しい
  • まずは無料体験でテックアカデミーを知ってから受講を決める
テックアカデミーの公式ページはこちら テックアカデミーの口コミ・評価はこちら
キカガク
  • 多種多様なスキルコース
  • 初心者から専門家まで対象
  • 給付金利用で費用を抑えられる
キカガクの公式ページはこちら キカガクの口コミ・評価はこちら
Aidemy Premium
  • 完全オンラインで、時間や場所に縛られず学習したい
  • マンツーマン学習サポートにより実践に近い経験をしたい
  • 未経験から機械学習エンジニアになりたい
Aidemy Premiumの公式ページはこちら Aidemy Premiumの口コミ・評価はこちら
My Agile Privacy
This website uses technical and profiling cookies. Clicking on "Accept" authorises all profiling cookies. Clicking on "Refuse" or the X will refuse all profiling cookies. By clicking on "Customise" you can select which profiling cookies to activate.