AI데이터 분석_ 파이썬 기초2(자료형변환함수, 인덱싱, 슬라이싱, 시퀀스 연산자, 입력함수,이스케이프 문자,퍼센트 연산자,format)

2024. 8. 27. 15:43파이썬을 활용한 데이터 분석

형변환 함수

  • 정수형 int
  • 실수형 float
  • 논리형 bool
  • 문자열 str

정수형 변환함수 int

#정수형 변환함수 int

num1 = 12.1
print(num1,type(num1)) #실수로 나오며 type도 float

#int()함수 사용
print(int(num1),type(int(num1))) #정수 12로 출력되며 자료형도 int로 변환

age = 25.0
print(age,type(age))
print(int(age),type(int(age)))

#문자형 실수는 int()함수로 한번에 형변환 불가!
str_num1 = '10.1'
print(str_num1,type(str_num1)) #따옴표안에 들어가있기때문에 당연히 문자형으로 출력
# pritn(int(str_num1),type(int(str_num1)))
# 에러발생! 문자형 정수는 먼저 float함수를 사용하여 따옴표를 제거한 후 int로 변환가능

print(float(str_num1),type(float(str_num1))) #문자형 '10' =>> 10.0으로 실수형 숫자로변함
print(int(float(str_num1)),type(int(float(str_num1)))) #정수형 10으로 출력

#완전한 문자형은 int로 전환불가
# print(int('안녕'),type(int('안녕')))# 에러 발생. 적어도 숫자의형태여야함

정수형이 아닌 숫자를 정수형으로 변환하고싶을때는 int()함수를 사용하여 형변환 한다. 하지만 여기서 주의할점은 문자형 실수는 int함수로 한번에 형변환할 수는 없다. '10.1'이렇게만 봤을때 이건 문자형이다. 이걸 다시 정수형으로 바꾸기 위해서는 일딴 따옴표부터 떼야하는데 따옴표를 떼봤자 정수가 아닌 실수이기때문에 일단 float()함수로 따옴표를 제거한 실수형숫자로 바꾼후에 int를 사용하여 정수형으로 바꿔주어야한다. 또, 당연하게도 완전한 문자형인 '안녕'이런것들은 당연히 숫자로 형변환 할 수 없다.

 

실수형 변환함수 float

#실수형 변환함수 float

num1= 314
print(num1,type(num1)) # 정수형이며 자료형도 int로 출력

#float() 함수 사용
print(float(num1),type(float(num1)))# 314.0인 실수로 출력되며 자료형도 float로 출력

평균 = 272
print(float(평균),type(float(평균)))

#논리형 실수변환
print(float(True),type(float(True))) #True는 1인데 1뒤에 0.0를 붙여서 1.0으로 변환
print(float(False),type(float(False))) #False는 0인데 뒤에 0.0붙여서 0.0으로 변환

숫자를 실수형(소수)로 변환하고싶을때는 float함수를 사용하여 변환해야한다. 정수형자료형을 실수로 변환할경우 정수형 숫자 뒤에 .0이 붙은 형태로 반환된다. 논리형은 True와 False는 숫자 1과 0으로도 사용할 수 있기때문에 논리형역시 실수로 변환이 가능하다. True는 1이기 때문에 뒤에 .0이 붙은 1.0으로 반환되고 0인 Fasle는 0.0으로 반환된다.

 

논리형 변환함수 bool

#논리형 변환함수 bool()

print(True,type(True))  #논리형함수 출력
print(False,type(False))

# int()로 논리형함수 변환하기
print(int(True),type(int(True))) #참을 숫자변화하면 1
print(int(False),type(int(False))) #거짓을 숫자변환하면 0

#논리형 False
print(bool(''),type(bool(''))) #띄어쓰기조차 없는 값은 무조건 False 빈괄호도 마찬가지
print(bool(0),type(bool(0))) # 0도 마찬가지로 False변환

#논리형 True
print(bool(5),type(bool(5))) #0이 아닌 모든값은 True로 변환
print(bool(' '),type(bool(' '))) #논리형은 공백도 데이터로 인정하기때문에 True변환

논리형으로 자료형을 변환하고싶다면 논리형 변환함수인 bool을 사용하여 논리형으로 변환할 수 있다. 논리형은 숫자 1, 0으로 변환될 수 있으며, 이 외에도 띄어쓰기 조차없는 공백값으 무조건False로 반환된다. 또한 정수형중에서 0이아닌 모든 숫자는True로 반환되는데, 띄어쓰기 조차없는값은False이지만 파이썬의 경우 띄어쓰기되어있는 공백은 값으로 계산하기때문에 띄어쓰기가 들어있는 값을 논리형처리하면 True로 변환된다.

 

문자형 변환함수 str

#문자형 변환함수 str()
print(str(10),type(str(10))) #'10'이라는 문자형으로 변환
print(str(3.14),type(str(3.14))) # '3.14'라는 문자형으로 변환
print(str(True),type(str(True))) #'True'라는 문자형으로 변환

다른 자료형을 문자형으로 변환하고싶을때는str을 사용하면 된다. 일반 정수형이나 실수형모두 str을 사용하면 문자형으로 형변환이 가능하고 논리형역시 논리형이었던True와 False가 모두 따옴표가 붙어 문자 단어의 형태로 출력된다.

 

 

시퀀스 자료형

#시퀀스 자료형
print('안녕하세요')
#위와 같은 문자열은 문자들을 열거했다는 뜻으로 '안녕하세요'라는 문자형데이터가 아니라
#안, 녕, 하, 세, 요 5개의 데이터값이 묶여있는것
#이런 자료들을 시퀀스 자료형이라고 부름

시퀀스 자료형은 값이 연속적으로 이어진 자료형이다. 위의 쿼리문과 같이 문자열을 열거했을경우 하나의 문장으로 출력이 되지만 따지고보면 안,녕,하,세,요 라는 5개의 문자데이터값이 묶여있는 형태가 열거된것이다. 이런자료들을 시퀀스 자료형이라고 부른다.

 

인덱싱(indexing)

#indexing : 특정문자열안에서 특정문자를 추출할때 사용하며 인덱스번호를 이용
#인덱스 번호: 문자열를 구성하는 모든 문자에 부여된 고유번호

#인덱스 시작: 0부터
#마이너스 인덱스의 시작번호: 뒤에서 -1

         #0,1,2,3,4
data1 = 'hello'
         #-5,-4,-3,-2,-1

#홀수번호만 가지고 오기
print(data1[1],data1[3]) # e,l출력
#짝수번호만 가지고 오기
print(data1[0],data1[2],data1[4]) # h l o 출력

#olleh역순 출력하기
print(data1[4]+data1[3]+data1[2]+data1[1]+data1[0]) #일반 인덱스번호 사용
print(data1[-1]+data1[-2]+data1[-3]+data1[-4]+data1[-5]) #마이너스 인덱스번호 사용


#<실습 적용_노래가사에서 특정 문자 추출하기>

no_pain = '내가만든 집에서 모두함께 노래를합시다'
#'내가만든+노래' 추출하기
print(no_pain[0]+no_pain[1]+no_pain[2]+no_pain[3],no_pain[14]+no_pain[15]) #일반인덱스 사용
print(no_pain[-20]+no_pain[-19]+no_pain[-18]+no_pain[-17],no_pain[-6]+no_pain[-5]) #마이너스 인덱스 사용

#한글자 가지고 오기
print(no_pain[4],type(no_pain)) #4번은 공백 추출. 공백도 인덱스 문자를 가지고 있으며 str자료형으로 추출
print(no_pain[-3],type(no_pain))

인덱스는 특정문자열안에서 특정 문자를 추출할때 사용하며 이때 인덱스 번호라는 것을 사용한다. 인덱스 번호란 문자열을 구성하는 모든 문자에 부여된 고유한 번호로 0부터 시작한다.

인덱스번호를 가지고 데이터에 접근하는 방법은 데이터가 저장된 변수명 뒤에 []괄호를 사용하는 방법이다. 변수[2]이건 변수에 저장된 데이터 셋 안에서인덱스 2번호(3번째)의 데이터를 가져오라는 뜻이다.

인덱스번호는 0부터시작하는 고유값을 가짐과 동시에 -마이너스 번호도 함께 가지고 있다 마이너스 인덱스 번호를사용할때는 출력하고자 하는데이터를 역순으로 접근하여 역순으로 출력할 수 있다. 변수[-3]의 형태로 사용한다. 

또한 파이썬에서는 공백도 데이터값으로 계산하기때문에 문자열안에 공백이 있다면 그 공백역시 동일하게 인덱스 번호를 가진다.

 

슬라이싱(slicing)

#슬라이싱(slicing
#문자열의 인덱스번호를 활용해서 한 문자 이상 구성된 단어나 문자를 추출할때 사용
#사용법: 변수명[시작값:끝값:스텝]
#*스텝은 필수는 아니며 미설정시 1로설정(건너뛰기 없이 한번에 출력)*

no_pain = '내가만든 집에서 모두함께 노래를합시다. 소외됐던 사람도 모두 함께 노래를 합시다'
print(no_pain,type(no_pain))

#슬라이싱하여 한문장만 출력하기
print(no_pain[0:19]) # 19번째인 '다'까지 입력했으나 '다'까지 나오지 않음. 끝자리에 입력된 숫자보다 하나를 덜 가져옴(입력된 값 바로 전까지)
print(no_pain[0:20]) #20번입력시 19번째까지 출력가능. 또한 스텝 미설정으로 건너뛰기없이 완전한 첫출 출력

#슬라이싱 스텝(step)
#한글자씩 건너뛰어서 출력하기
print(no_pain[0:44])# 전체 출력
print(no_pain[0:44:2]) #한글자씩 건너 뛰어서 출력

sing = 'no pain'
print(sing)
print(sing[::-1]) #맨처음, 맨끝값 생략한 후 음수로 스텝출력하면 역순으로 조회가능
print(no_pain[::-1])

#슬라이싱 처음과 끝
print(no_pain[::]) #맨처음과 끝값은 생략가능

문자열값을 추출하는 방법은 인덱스 이외에도 슬라이싱이라는것이 있다. 슬라이싱은 문자열의 인덱스 번호를 사용하여 한 문자 이상 구성된 단어나 문자를 추출할때 사용하는 방법으로, 사용법은 [시작값 : 끝값 : 스텝]으로 구성된다. 스텝은 필수는 아니며 미설정시 1로 설정된다. 이는 건너뛰는 값없이 한번에 출력한다는 의미이다. 변수[1:3:2]는 변수에서 인덱스 번호 1번부터 3번을 가지고 오는데 2씩 건너뛴값을 가져오겠다는 명령어이다. 또한 슬라이싱의 경우 시작값과 끝값 생략이 가능한데 [:5:2]이처럼 시작값을 생략하고적게되면 인덱스 번호 0번부터 가지고 오겠다는 뜻이며, 반대로 [1::2]이렇게 적을 경우 시작번호부터 끝지점까지 전부 가져오겠다는 뜻이다. [::2]이렇게 적을 경우에는 시작값부터 끝값전부 다 출력하면서 2씩 건너뛴다는 뜻이다. 스텝값도 따로 건너뛰지 않으면서 전체값을 전부 출력하려면 [::]이렇게 시작값, 끝값, 스텝값을 전부 생략시켜주면 된다. 

슬라이싱의 경우 [::-1]의 명령어를 사용하게되면 전체 데이터셋을 역순으로 출력할 수 있다.  

 

시퀀스 연산자

#시퀀스 연산자

#문자열의 시퀀스 연산
# + : 문자열의 '연결'
data1 = 'hello'
data2 = 'python'
print(data1+data2)
# print(data1+10) #에러 발생
print(data1+'10') #'10은 문자이기때문에 가능'
print(data1+str(10)) #'str()'함수로 변형해주었기때문에 가능

# * : 문자열 반복
print(data1*3) #3번 반복출력
# print(data1*3.0) #3.0실수이기때문에 반복불가 에러
# print(data1*data2) #'hello'를 'python'만큼 곱해! <- 잘못된 명령문

시퀀스자료형에 연산자를 사용할 수 있는데 +를 시퀀스 자료형에 사용하면 문자열자체를 연결해주는 연결성으로 사용할 수 있고 시퀀스 자료형에 *를 사용하게되면 시퀀스자료형*숫자의 형태로 사용하게 되는데 입력한 숫자만큼 시퀀스 문자열을 반복해댤라는 의미이다.

 

입력함수 input

#입력함수 : input()
#사용자로부터 값을 입력받기 위한 함수
#입력받은 값은 str로 저장되기때문에 다른 자료형으로 저장하고싶을때는 반드시 형변환 필수

band_name = '터치드'
print(band_name,type(band_name))

#input함수로 변경
band_name = input('좋아하는 밴드이름을 입력하세요: ')
print(band_name,type(band_name)) #입력된 값의 자료형을 알 수 있음
member =input('멤버 수는 몇명인가요?: ')
print(member,type(member)) #숫자임에도 불구하고 str로 입력됨

#<실습>
#변수와 input함수 사용해 순차적으로 등장하는 밴드설문조사지 만들기

band_name = input('가장 좋아하는 밴드이름을 입력하세요: ')
band_sing = input(band_name+"의 노래중 가장 가장 좋아하는 노래는?: ")
band_album = input(band_sing+"엘범을 구매하셨나요?: ")

print(band_name,type(band_name))
print(band_sing,type(band_sing))
print(band_album,type(band_album))

#순차적으로 출력되는 인터프리터 방식이기때문에 변수를 넣어 사용자가 입력한 값이 나옴

input형변환

#입력함수 input()자료형 변환

num1 = int(input('숫자를 입력하세요:' ))
print(num1,type(num1))
#변수 만들때 input으로 감싸진 변수를 int함수로 한번더 감싸는 방식

num2 = float(input('소수점을 입력하세요: '))
print(num2,type(num2))
#실수로 값 받기

# num3 = input('숫자입력')
# print(int(숫자입력),type(숫자입력))
#에러! print문으로 받을때 값지정하게되면 입력칸까지는 등장하나, 입력하고나면 오류가남
#변수 만들때 input값을 무조건 원하는 자료형으로 나오도록 해야함

input함수는 사용자에게 입력받을 값이 있을때 사용하는 함수이다. input('사용자에게 보여질 문장')의 형태로 입력하며 input함수의 경우 입력하는 모든 값은 전부 문자열로 값이 저장되기때문에 사용자에게 값을 입력받는 값이 숫자인경우 int(input)의 형태로 input값이 받아오는 값을 정수형으로 한번 더 변환해주는 작업을 거쳐야한다. input함수의 값을 저장한 변수를 print문으로 다시 출력하면 저장된 값만 따로 출력하는 것도 가능하다.

 

 

이스케이프 문자

  • \n : 줄바꿈
  • \' : 작은 따옴표
  • \" : 큰 따옴표
  • \\ : 역슬래쉬 사용
  • \t : tab키 사용(들여쓰기)
이스케이스 문자
#문자열 안에서 특수한 기능을 하는 문자

#\n: 줄바꿈
#\': '작은 따옴표
#\": "큰 따옴표
#\\: \역슬래쉬 사용
#\t :tab키 사용(들여쓰기 / 일정간격 띄우기)키 표현

print('2일차 수업 복습중 입니다')
# print('2일차 수업 '복습중' 입니다') # 에러! 문자열''표식안에 또 ''표식을 썼기때문
print('2일차 수업 \'복습중\' 입니다') #복습 중 강조하여 출력가능

#문자열 표식 따옴표와 강조 따옴표가 다르다면 이스케이프문 사용안해도 가능
print('2일차 수업 "복습중"입니다')
print("2일차 수업 '복습중'입니다")

print("\t\'동해물\'과\n\"백두산\"")
#동해물 앞부분에 탭기적용해서 띄워줌. 동해물 이스케이프 작은 따옴표로 강조.
#백두산 큰따옴표로 바꾼후 줄바꿈을 해줌으로써 원래 한줄 출력이지만
#백두산이 밑으로 내려가서 출력됨



#<실습>
#이스케이프 문자를 사용하여 문장 한줄 형태 바꾸기

print("굉장히 졸리지만 복습내용은 끝내고 자야해") #기본 문장
print("굉장히\\ 졸리지만 \t\"복습내용\"은 \n끝내고 \'자야해\'")

#<실습2>
print("내가 만든집에서 모두함께 노래를 합시다") #기본 문장
print("내가\n 만든\"집\"에서\n \t모두함께\n \t노래를\n \t합시다")

이스케이프 문자는 문자열안에서 특수한 기능을 하는 문자이다. 문자열 사이에서 ""따옴표가 들어가아햐는경우나 출력할때 줄바꿈이 아니라 탭키를 사용하여 추출해야하는 경우 등에 사용한다.

 

퍼센트 연산자(형식지정자)

#퍼센트연산자(형식지정자)
#%d : 정수 숫자
#%f : 실수 숫자
#%s : 문자형
#%s : 논리형

print("%d" %10)
print("%f" %3.14)
print("%.2f" %3.14) #퍼센트 뒤에 .N입력하면 입력한 숫자만큼의 자릿수만 보여줌
print("%s" %'python')
print("%s" %True)

print("%d %f %s" %(10, 15.5, '안녕')) #한꺼번에 사용시 괄호사용!

퍼센트 연산자는 형식을 갖춘 문자열로, 형식지정자라고도 불린다. 형식지정자 사용방법은 출력문 맨 앞에 각 자료형에 맞는 형식지정자를 적어놓고, 바로 뒤에 %를 붙여 해당 값을 적어넣는 형식인데, 이때 쉼표를 사용하지 않고 한번에 출력한다. 만약 숫자, 문자, 논리형 등등 퍼센트연산자를 한꺼번에 사용하여 출력하는 경우에는 ""따옴표를 사용하여 형식지정자를 묶고, 그에 따른 값들은 %()의 형태로 %와 괄호로 묶어 사용한다.

 

str.format

#str.format
#"{} {}".format(값1, 값2) #형식으로 사용

#10+20=30 표현하기
number1 = 10
number2 = 20
print(number1,"+",number2,"=",number1+number2) #기본 출력문활용

print("{}+{}={}".format(number1, number2, number1+number2))
print("{2}={1}+{0}".format(number1, number2, number1+number2))
print("{0}+{1}={2}".format(number1, number2, number1+number2))

f-string은 따로 값을 넘겨줄 필요없이 알아서 변수에 저장된 값을 중괄호안으로 가져오는 방식을 사용한다. 때문에 굉장히 편라하게 사용할 수 있으며, 중괄호 안에 번호를 지정하여 순서를 변경하는 것도 가능하다. 

 

전체실습코드

#1.hello python 출력하기

str1 = 'hello python'
print(str1)

#2-1 문자열을 연속해서 3번 출력하기(시퀀스 연산자 이용)
print(str1*3)

#2-2 hello python 문자열에서 py만 추출하여 출력하기(인덱스 이용)
print(str1[6]+str1[7]) #인덱스 사용
print(str1[-6]+str1[-5]) #마이너스 인덱스 사용

#2-3 hello python 문자열에서 hlopto만 추출하여 출력하기(슬라이싱 이용)
print(str1[0]+str1[2]+str1[4]+str1[6]+str1[8]+str1[10]) #인덱스사용
print(str1[-12]+str1[-10]+str1[-8]+str1[-6]+str1[-4]+str1[-2]) #마이너스 인덱스사용
print(str1[::2]) #슬라이싱 사용

#2.사용자로부터 상품명(문자열), 재고량(정수형), 제작날짜(mm.dd 실수형)을 입력받아 출력하기


상품명 = input('상품명 입력: ')
재고량 = int(input('재고량 입력: '))
제작날짜 = float(input('제작 날짜 입력: '))

print(상품명,type(상품명),재고량,type(재고량),제작날짜,type(제작날짜))
print("                        ")


#%연산자 사용
print("---%연산자 사용---")
print("상품명:"+"%s" %상품명)
print("재고량:" , "%d" %재고량)
print("제작날짜:","%.2f" %제작날짜)
print("                        ")

#str.format사용
print("---str.format 사용---")
print("상품명:{}".format(상품명))
print("재고량:{}".format(재고량))
print("제작날짜:{}".format(제작날짜))
print("                        ")

#f-string사용
print("---f-string사용---")
print(f"상품명: {상품명}")
print(f"재고량: {재고량}")
print(f"제작날짜: {제작날짜}")

#이름(문자열), 나이(정수), 오늘 날짜(실수)를 입력 받고 변수에 입력받은 값을 저장한 다음 출력결과를 다음과 같이 나오게 하기

name = input('이름 입력')
age = int(input('나이 입력'))
date = float(input('날짜 입력'))
print("                        ")
print('이름입력: '+ name)
print('나이 입력: ', age)
print('날짜 입력: ', date)
print("                        ")

print("\'안녕하세요!\'"+"\t제 이름은","\""+name+"\""
      "이고"+"\n나이는""\n",age,"살 입니다!"+"\n이번달은","3월입니다")


 

학습일기

오늘 복습했던 내용은 기초 형변환과 인덱싱, 슬라이싱, 시퀀스 연산자, 입력함수,이스케이프 문자,퍼센트 연산자,format였다. 사실 복습하면서 나머지 내용들은 지금도 계속 사용하고 있었지만 f-string보다는 출력문 자체에서 사용하는 print(f"{}")이 방식을 더 많이 사용해서 약간 덜 익숙한 느낌..?이 들었다. 맞다 이런 방식도 있었지 하면서..이렇게 기초내용을 한번씩 상기시키면서 조금이나마 몰랐던 부분들을 복습할 수 있고, 한번더 자세하게 짚고 넘어갈 수 있는점이 좋은것 같다! 조금 귀찮더라도 티스토리 기록하길 역시 잘한듯...!!