반응형

파이썬 GUI tkinter / dataframe의 내용을 Listbox, Label로 표시

 

 

1) numpy 배열로 data frame 생성

Listbox에 넣을 이름과 Label에 정보를 표시할 성별과 태어난 해 정보를 가지고 배열을 만듭니다. 

배열을 DataFrame으로 생성합니다. 

# numpy 배열로 data frame 생성
my_darray = np.array([
    ["Bob", "M", 1991],
    ["Kate", "W", 1992],
    ["Kevin", "M", 1993],
    ["Scott","M",1994],
    ["Jackson", "M", 1995],
    ["Liam", "M", 1996],
    ["Noah", "M", 1997],
    ["Aiden", "M", 1998],
    ["Lucas", "M", 1999],
    ["Mason", "M", 2000]])
student_pd = pd.DataFrame(my_darray)
print(student_pd)
print(student_pd.shape)
print(len(student_pd))

 

 

2) Tkinter로 window 생성 및 ListBox 생성

간단하게 Tk() 생성자로 window를 생성하였고, 크기를 지정하였습니다. 

또한 Listbox 를 생성하였고, Listbox 안의 column이 선택되었을 때, CurSelect(임의 생성 함수)가 호출되도록 하였습니다.

 

그리고 리스트에는 dataframe의 이름을 삽입하도록 하였고, 리스트의 맨뒤쪽(END)에 삽입이되도록 하였습니다. 

window = Tk()
window.geometry("300x200")

lb = Listbox(window, height=5, selectmode=SINGLE)
lb.bind('<<ListboxSelect>>',CurSelect)
lb.pack()

for i in student_pd.index:
    val = student_pd.loc[i, 0]
    lb.insert(END, val)

 

3) Label 생성

고정으로 표시할 Label과 이름, 성별, 태어난 해에 대한 정보를 동적으로 가져와 표시할 라벨을 생성하였습니다.

Name_l = Label(window, text="Name : ")
Name_l.pack()
Name_w = Label(window, text="")
Name_w.pack()

Sex_l = Label(window, text="Sex : ")
Sex_l.pack()
Sex_w = Label(window, text="")
Sex_w.pack()

Birth_l = Label(window, text="Birth : ")
Birth_l.pack()
Birth_w = Label(window, text="")
Birth_w.pack()

 

4) Listbox에 아이템이 선택되었을 때의 호출되는 함수 정의

lb.curselection() 함수를 이용해 현재 선택된 아이템의 정보를 가져오고, 출력해보게 하였습니다. 

그리고 Label에 현재 선택된 아이템의 이름, 성별, 태어난 해를 표시하도록 하였습니다.  

def CurSelect(evt):
    value = str((lb.get(lb.curselection())))
    index = str((lb.index(lb.curselection())))
    print(value)
    print(index)

    Name_w["text"]  = student_pd.loc[lb.index(lb.curselection()), 0]
    Sex_w["text"]   = student_pd.loc[lb.index(lb.curselection()), 1]
    Birth_w["text"] = student_pd.loc[lb.index(lb.curselection()), 2]

 

 

전체 코드

import numpy as np
import pandas as pd
from tkinter import *

# numpy 배열로 data frame 생성
my_darray = np.array([
    ["Bob", "M", 1991],
    ["Kate", "W", 1992],
    ["Kevin", "M", 1993],
    ["Scott","M",1994],
    ["Jackson", "M", 1995],
    ["Liam", "M", 1996],
    ["Noah", "M", 1997],
    ["Aiden", "M", 1998],
    ["Lucas", "M", 1999],
    ["Mason", "M", 2000]])
student_pd = pd.DataFrame(my_darray)
print(student_pd)
print(student_pd.shape)
print(len(student_pd))

def CurSelect(evt):
    value = str((lb.get(lb.curselection())))
    index = str((lb.index(lb.curselection())))
    print(value)
    print(index)

    Name_w["text"]  = student_pd.loc[lb.index(lb.curselection()), 0]
    Sex_w["text"]   = student_pd.loc[lb.index(lb.curselection()), 1]
    Birth_w["text"] = student_pd.loc[lb.index(lb.curselection()), 2]

window = Tk()
window.geometry("300x200")

lb = Listbox(window, height=5, selectmode=SINGLE)
lb.bind('<<ListboxSelect>>',CurSelect)
lb.pack()

for i in student_pd.index:
    val = student_pd.loc[i, 0]
    lb.insert(END, val)

Name_l = Label(window, text="Name : ")
Name_l.pack()
Name_w = Label(window, text="")
Name_w.pack()

Sex_l = Label(window, text="Sex : ")
Sex_l.pack()
Sex_w = Label(window, text="")
Sex_w.pack()

Birth_l = Label(window, text="Birth : ")
Birth_l.pack()
Birth_w = Label(window, text="")
Birth_w.pack()

window.mainloop()
반응형
반응형

파이썬 데이터 분석 / pandas DataFrame 열 추가 및 삭제

DataFrame 데이터 가져오기

야후에서 제공하는 API를 사용해 데이터를 가져와 보겠습니다. 

아래는 삼성전자의 주식 정보를 가져오는 구문입니다. 

기간은 2020/07/01 이후의 데이터를 가져옵니다. 

 

아래의 samsung 변수는 dataframe 형식으로 반환됩니다. 

from pandas_datareader import data as pdr

samsung = pdr.get_data_yahoo('005930.KS', start='2020-07-01')

DataFrame 열 확인

데이터를 출력하는 것은 간단합니다. 

DataFrame의 열을 확인하기 위해서는 columns 속성을 이용합니다. 

아래를 보면 6개의 열을 가지고 있음을 볼 수 있습니다. 

print(samsung)
print(samsung.columns)

DataFrame 열 삭제

열을 삭제해 보겠습니다. 

del 명령어를 이용하여 DataFrame의 속성을 지정해주면 삭제됩니다. 

del samsung["High"]
print(samsung.columns)

DataFrame 열 추가

아래 구문은 NewOne 이라는 열을 추가하는데, 값은 모두 0으로 지정하여 값을 추가하였습니다. 

samsung['NewOne'] = 0
print(samsung.columns)
print(samsung)

 

이번에는 새로운 열을 추가할 때, 각 행의 값을 다른 열의 값을 이용하여 넣어보도록 하겠습니다. 

'Close'는 주가의 그 날의 종가 데이터입니다. 

새로운 열은 그 전날의 종가 데이터의 변동 차이에 대한 값을 넣도록 하였습니다. 

shift(1)을 하면 전체 데이터가 1행씩 뒤로 이동되는데, samsum['Close'].shift(1)을 하면 이전 날의 종가 데이터가 됩니다.

 

하여, 새로운 열인 'DailyChange'를 추가하여, 종가 변동차이 값을 지정하였습니다. 

samsung['DailyChange'] = samsung['Close']- samsung['Close'].shift(1)

print(samsung.columns)
print(samsung)
print(samsung['DailyChange'])

전체 코드

from pandas_datareader import data as pdr

samsung = pdr.get_data_yahoo('005930.KS', start='2020-07-01')

samsung['DailyChange'] = samsung['Close']- samsung['Close'].shift(1)

print(samsung.columns)
print(samsung)
print(samsung['DailyChange'])
반응형

+ Recent posts