딥러닝에서는 주로 excel이나 csv로 저장된 데이터로부터 label과 같은 정보를 불러오기 위해 pandas 패키지가 쓰인다. pandas의 모든 기능을 알아보기보다는 자주 쓰였던 기능만 기록해 보려고 한다. 

 

pandas 공식 document를 참고하면 더욱 정확하고 많은 정보를 볼 수 있다. 

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html

 

pandas.DataFrame.loc — pandas 1.2.3 documentation

A slice object with labels, e.g. 'a':'f'. Warning Note that contrary to usual python slices, both the start and the stop are included

pandas.pydata.org

 

데이터 읽기

 

특정 column 선택하기

 

특정 row 선택하기

 

특정 row, column에 해당하는 data 추출

 

특정 column을 row index로 바꾸기

 

특정 row를 숫자로 선택하기

 

기회가 된다면 loc, iloc을 제외하고 많이 사용되는 문법도 추가하도록 하겠다. 

'Python' 카테고리의 다른 글

Argparse, python 기반의 명령형 인터페이스 라이브러리  (0) 2020.04.22

argparse란 프로그램에 필요한 인자를 사용자 친화적인 명령행 인터페이스로 쉽게 작성하도록 돕는 라이브러리 이다. 즉, command 창에서 프로그램 내의 인자를 조절하게끔 도와준다. 참고로 argparse는 python에 기본적으로 내장되어 있다. 

 

command 창에서 [ python main.py --mode test ] 와 같이 --을 이용하여 추가적인 명령어를 사용하는 것을 흔하게 볼 수 있는데, 이것이 바로 argparse를 사용한 예시이다. 

 

argparse를 잘 알고있다면, 코드의 변화를 최소화 시키는 효율적인 코드를 작성할 수 있다. 

 

 

 

 

 

1. parser 의 전체적인 흐름

 

##main.py 

import argparse

#파서 만들기
parser = argparse.ArgumentParser(description='Argparse example')

#인자 추가하기
parser.add_argument('--learning_rate', '-lr', type=float, default=0.001, help='learning rate')
parser.add_argument('--mode', type=str, defualt='train', choices=['train', 'test'])
parser.add_argument('--no_gpu', action='store_true')
parser.add_argument('--epochs', type=int, required=True, help='number of epochs')

#내가 쓴 인자 저장
args = parser.parse_args()

#인자 사용
lr = args.lr

 

먼저 argparse를 import 한다. 

 

ArgumentParser를 이용하여 파서를 만들 때 'description= ' 키워드를 이용하여 해당 프로그램에 대한 설명을 넣는다. 보통 기능과 작동 방식에 대한 간략한 설명을 제공한다. 

 

그 후 add_argument() method를 이용하여 프로그램에 필요한 인자들을 정의한다. 

 

마지막으로 parse_args() method로 명령창에서 주어진 인자들을 파싱한다.  파싱이 무엇인지는 아래에 다시 설명하도록 하겠다. 

 

args.lr과 같이 args로부터 인자들을 받아 사용 가능하다. 

 

 

 

 

 

2. add_argument() 메서드

 

name or flags : 인자의 이름 지정

 

인자의 이름을 정할 때, --help, -h와 같이 fullname과 약자를 동시에 지정할 수 있다. 

##main.py 
parser.add_argument('--learning_rate', '-lr')

 

여기서 인자의 앞에 -- , - 가 붙어 있으면 optional 인자 (선택형 인자) , 붙어있지 않으면 positional 인자(위치형 인자) 이다. 위치형 인자는 필수적으로 입력해야 하는 인자이며, 선택형 인자도 required=True를 통해 필수로 입력하게끔 지정할 수는 있다.

 

인자가 여러개 있을 때, positional 인자는 순서를 지켜 입력해야 하며, optional 인자는 순서를 지키지 않아도 괜찮다. 

##main.py

import argparse

parser = argparse.ArgumentParser(description='Argparse example')
parser.add_argument('mode', type=str, choices=['train', 'test'])
parser.add_argument('-lr', type=float, default=0.01)
args=parser.parse_args()

print('args.mode : ', args.mode)
print('args.lr : ', args.lr)


##command 창

#가능
>python main.py train -lr 0.1
args.mode :  train
args.lr :  0.1

>python main.py -lr 0.1 train
args.mode :  train
args.lr :  0.1

#불가
#positional 인자는 인자 이름 없이 value값만 순서대로 써줘야 한다. 
>python main.py mode train -lr 0.1
usage: main.py [-h] [-lr LR] {train,test}
main.py: error: argument mode: invalid choice: 'mode' (choose from 'train', 'test')

 

 

 

type & default : 인자의 type, default 값 지정

 

인자가 int, float, str, bool 등 어떤 type인지 지정한다. default type은 str이다.

default=를 통해 사용자가 옵션을 주지 않았을 때 기본적으로 들어가는 값을 지정해 놓는 것이 좋다. 

##main.py 
parser.add_argument('--learning_rate', '-lr', type=float, default=0.01)

 

 

 

action : 인자의 저장 방식

 

우리가 command창을 통해 인자와 값을 적어 주었을 때, 이것을 코드가 해석하는 방식을 지정해 주는 것이 action이다. 여기서 드디어 파싱의 개념이 나온다.  기본값은 store 이다. 

 

  • store : action 인자의 default 값이다. 인자 이름+스페이스바 후에 나오는 값을 인자의 값으로 저장한다. = 파싱

#command에서 입력 후
>python main.py -lr 0.1

#main.py 에서 아래 코드가 호출 될 때
...
args = args.parse_args()
...
# parse_args() method 내에서 '-lr 0.1'.split() 가 일어나며 -lr에 0.1이 저장된다. 이것이 파싱이다. 

 

  • store_const : const 키워드 인자에 지정된 값을 저장한다. 

##main.py 

import argparse

parser = argparse.ArgumentParser(description='Argparse example')
parser.add_argument('-lr', action = 'store_const', const=0.1)
args = parser.parse_args()

print('args.lr : ', args.lr)


##command

>python main.py
args.lr : None

>python main.py -lr
args.lr : 0.1

 

  • store_true, store_false : 각각 True, False 값을 저장하는 store_cost의 일종이다. const를 따로 쓰지 않아도 const에 각각 True, False 값이 저장된다. 

##main.py 

import argparse

parser = argparse.ArgumentParser(description='Argparse example')
parser.add_argument('--gpu', action = 'store_true') #--gpu 불리면 True
parser.add_argument('--cpu', action = 'store_false') #--cpu 불리면 False
args = parser.parse_args()

print('args.gpu : ', args.gpu)
print('args.cpu : ', args.cpu )


##command

>python main.py
args.gpu :  False
args.cpu :  True

>python main.py --cpu
args.gpu :  False
args.cpu :  False

>python main.py --gpu
args.gpu :  True
args.cpu :  True

>python main.py --gpu --cpu
args.gpu :  True
args.cpu :  False

 

  • append : 리스트를 저장하고 인자가 불릴 때마다 리스트에 값을 추가한다. 

##main.py
...
parser.add_argument('--cls', action = 'append')
...


##command
>python main.py --cls cat --cls dog
args.class :  ['cat', 'dog']

 

  • append_count : 리스트를 저장하고 const 키워드 인자로 지정된 값을 리스트에 추가한다. 

##main.py 

import argparse

parser = argparse.ArgumentParser(description='Argparse example')
parser.add_argument('--str', dest = 'types', action = 'append_const', const = str)
parser.add_argument('--int', dest = 'types', action = 'append_const', const = int)
args = parser.parse_args()

print(args)


##command
>python main.py
Namespace(types=None)

>python main.py --str
Namespace(types=[<class 'str'>])

>python main.py --str --int
Namespace(types=[<class 'str'>, <class 'int'>])

 

  • count : 키워드 인자가 등장한 횟수를 계산한다. 

##main.py
...
parser.add_argument('--verbose', '-v', action='count', default=0)
...


##command

>python main.py -vv
args.verbose :  2

 

 

 

nargs : 인자의 값 개수 지정

 

보통 하나의 인자당 하나의 값이 들어온다. nargs는 한 인자에 여러개의 값이 들어올 수 있게끔 한다. 

  • nargs=1 : 1개가 들어간 리스트를 만드는 것으로 nargs를 지정하지 않은 기본값과는 다른다. 

  • nargs='?' : const, default와 함께 사용되며, command에서 '인자 값'으로 불러 값을 저장해주는 것도 가능하고, command에서 인자만 불러 const값으로 저정도 가능하며, command에서 부르지 않아 default값으로 저장도 가능하다. 

  • nargs='*' : 한 인자당 여러 값을 저장할 수 있다. 

  • nargs ='+' : 한 인자당 여러 값을 저장할 수 있으며 최소 1개 이상을 필요로 한다.  

##main.py
...
parser.add_argument('--zoo1', type=str, nargs=2)
parser.add_argument('--zoo_q', type=str, nargs='?', const='cat', default='dog')
parser.add_argument('--zoo_star', type=str, nargs='*')
...


##command

#nargs=2
>python main.py --zoo1 cat dog
args.zoo1 :  ['cat', 'dog']

#nargs='?'
>python main.py --zoo_q
args.zoo_q :  cat

>python main.py
args.zoo_q : dog

>python main.oy --zoo_q lion
args.zoo_q : lion

#nargs='*'
>python main.py --zoo_star cat dog lion
args.zoo_star :  ['cat', 'dog', 'lion']

 

 

 

choices : 인자 값의 범위 지정

 

정해진 값들 중 하나가 선택되어야 할 때 유용하게 쓰인다. 

##main.py
...
parser.add_argument('--mode', type=str, choices=['train', 'valid', 'test'])
...


##command

>python main.py --mode valid
args.mode :  valid

>python main.py --mode next
main.py: error: argument --mode: invalid choice: 'next' (choose from 'train', 'valid', 'test')

 

 

 

required : 선택형 인자를 필수로 

 

생략되면 안되면 인자에 대하여 필수로 지정하도록 한다. optional 인자에 쓰인다. 

parser.add_argument('--device', type=str, choices=['train', 'valid', 'test'], required=True)

 

 

 

help : 인자의 설명 제공

 

인자에 대한 설명을 쓴다. command창에서 --help를 입력할 경우 각 인자에 대한 help가 출력된다. 

##main.py
...
parser.add_argument('--device', type=str, choices=['train', 'valid', 'test'], required=True, help='choose 1 task')
...


##command
>python main.py --help
optional arguments:
  -h, --help            show this help message and exit
  --device {train,valid,test}
                        choose 1 task
  

 

 

 

 

 

 

3. parse_args() 

 

command 창에서 받은 문자열을 객체로 변환하여 namespace의 attribute로 설정하는 것이 parse_args()를 호출함으로써 이루어진다. namespace는 object의 서브 클래스로 vars(args)를 통해 args를 딕셔너리 형태로 볼 수 있다. 

 

'Python' 카테고리의 다른 글

Pandas  (0) 2021.03.08

+ Recent posts