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参考書籍

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.