아이티윌_데이터 분석 55기/강의내용 필기_Python

#1 1일차_파이썬 설치 및 실행, 실습, 자료구조(리스트)

ecosso 2026. 5. 11. 16:21

01 설치 및 실행

 -01 설치 및 실행

 

02 파이썬 실습

 -01 단축키

  > 주석처리, 실행

 -02 문자열

  > 생성, 다중라인 문자열 선언, 추출, 결합, 반복

 -03 변수

  > 명명규칙, 타입 확인

 -04 모듈 (패키지, 라이브러리)

  > 모듈 전체 호출, 별칭 선언, 모듈 내 특정 함수만 추출

 -05 연산자

  > 비교 연산자, 산술 연산자

 

03 자료구조

 -01 리스트

  > 생성, 확장 및 추가, 색인

  > 여러 함수 및 매서드

   ▶ append, extend, insert, remove, del 함수, 정렬, 포함횟수

  > list의 원소별 반복

   ▶ map 함수

  > 형변환과 출력형식 변환

  > 문자열 매서드

   ▶ 대소치환, 길이, 추출, 시작/끝 여부, 공백/문자열 삭제, 치환, 분리

 -02 딕셔너리

 -03 행렬, 배열

 -04 Series

 -05 데이터프레임


01 설치 및 실행

파이썬(Python)은 원래 개발 목적으로 만들어진 프로그래밍 언어이다.
R과 유사한 인터프리터 방식의 언어로, 코드를 한 줄씩 실행할 수 있으며 변수 선언 및 활용이 가능하다.

 

파이썬에는 Python 2와 Python 3 버전이 존재하지만 두 버전은 문법 차이가 큰 편이다.
현재는 대부분 Python 3를 사용하며, 본 강의 및 실습에서도 Python 3 환경을 기준으로 진행한다.

파이썬 설치 방법은 다음과 같이 크게 3가지로 나뉘어진다. :

 

 1) 기본 Python 3 설치 후 필요한 분석 패키지를 개별적으로 추가 설치

 

 2) Anaconda 설치

  > Python 3 포함

  > 데이터 분석 패키지(numpy, pandas, sklearn 등) 기본 제공

  > IDE (Spyder) 및 개발 환경 포함

 

3) Miniconda 설치

  > Python 3 기반의 경량 버전

  > 필요한 패키지만 선택적으로 설치 가능

 

+) 파이썬의 경우 IDE가 다양한 편이다.

    선호하는 IDE를 설치하면 된다. (파이참, 주피터노트북, vs code, spyder)

 

본 강의 및 실습에서는 2번의 세팅으로 설치를 진행할 예정이다.

 

Anaconda는 아래 공식 홈페이지에서 설치할 수 있다. ▼

Download Success - post download | Anaconda

 1) Anaconda Distribution (해당 버전 설치 진행)

  > 패키지, IDE 등이 모두 포함되어 있다.

  > 일반적으로 많이 사용하며 용량이 큰 편이다. (1.1GB)

 

 2)Miniconda

  > 분석에 필요한 필수 패키지 등을 제외한 가벼운 버전이다.

  > 용량이 가벼우나 사용하며 필요한 패키지를 추가적으로 설치해야하는 단점이 있다.

 

다운로드 받은 Anaconda 설치 파일을 실행하여 설치를 진행한다. :

 

자동으로 경로를 지정한다. 처음 설치하는 상황이기에 수동으로 굳이 경로를 설정할 이유가 없으므로 두 번째 옵션을 선택해준다.

 

여러 버젼이 깔려있는 경우 세 번째 옵션은 선택하지 않는 것이 좋다.

마찬가지로 처음 설치하는 상황이므로 세 번째 옵션도 선택한다.

 

마지막 옵션은 기존 패키지 등의 삭제/초기화 등인데, 이 역시 기존에 설치된 파일이 없으므로 네 번째 옵션도 선택한다.

 

Spyder, 주피터노트북 등을 이미 포함하고 있기 때문에 추가적인 옵션은 설치하지 않는다.

Spyder가 함께 설치되었음을 확인할 수 있다.

 

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

 

▲ 설치 후 자동으로 작성되어 있는 문장 중 utf-8 이 포함된 부분을 삭제/수정하는 경우 가끔 버그가 발생한다고 한다.

    삭제를 원한다면 주석만 삭제하는 것을 추천한다.

 

 1) 레이아웃 변경

 

상단의 Window 탭 > Window layouts 을 통해 원하는 레이아웃으로 설정할 수 있다.

 

 

통계 및 분석 시간에 사용하였던 Rstudio와 동일한 레이아웃으로 변경이 진행되었다.

 


 2) 폰트, 테마, 글씨크기 조정

 

 상단의 Tools 탭 > Preferences에서 폰트, 테마, 글씨크기 등을 조정할 수 있다.


 3) 단축키 설정 / 변경

 

상단의 Tools 탭 > Preferences > Keyboard shortcut 에서 단축키 변경을 할 수 있다.

대문자 변환이 Alt + shift + U로 되어 있는데, Rstudio와 동일하게 Ctrl + shift + U로 변경하였다.

또한 소문자 변환 역시 Alt + U에서 Ctrl +  U로 변경하였다.


 4) 시각화 설정

 

상단의 Tools 탭 > Preferences > IPython console > Plotting 에서 시각화 설정을 할 수 있다.

레이아웃에서 시각화 탭을 닫은 경우 Graphics backend의 설정을 Inline -> Automatic으로 변경해주어야 한다.

해당 설정을 변경하게 되면 시각화 결과를 별도의 팝업창을 통해 보여주게 된다.


 5) 경로 설정

 

우측 상단의 경로 설정을 통해 불러올 파일이 있는 경로를 설정할 수 있다.


 

또한 Anaconda 설치 시 함께 Jupyter Notebook이 설치되었음을 확인할 수 있다.

웹브라우저 기반의 편집기로 다음과 같이 실행되며, 우측 상단의 ▼ New 버튼을 눌러 Python 3을 실행할 수 있다.

 

Jupyter Notebook은 다음과 같이 각 cell 단위로 실행을 진행할 수 있으며, 실행을 위한 단축키는 Ctrl + Enter이다.

상단의 + 버튼을 통해 셀을 추가할 수 있다.

▲ IN - OUT이 모두 저장되기 때문에 전체적인 흐름을 확인하기 좋다.

    텍스트를 저장하고 싶다면 Spyder, 텍스트와 결과 모두 저장하고 싶다면 Jupyter Notebook을 사용하면 된다.

 

ex) kmeans와 dbscan 결과를 코드, 결과, 시각화 모두 저장할 수 있다.

 

 단지 웹브라우저로 실행되는 특징이 있어 메모리를 많이 사용한다는 단점이 있다.

 따라서 Jupyter Notebook 사용시에는 다른 인터넷 브라우저 창을 가급적 종료해두는 것이 좋다.


02 파이썬 실습

 -01 단축키

  1) 주석처리

일반 주석처리/해제 ctrl + 1
구분선이 포함되어 있는 주석처리  ctrl + 4
구분선이 포함되어 있는 주석해제 ctrl + 5

 

  2) 실행

라인 단위의 실행 f9
셀 단위의 실행  ctrl + enter
전체 실행  f5

 

 * 셀의 경우 #%%로 선언 가능하며, 하나의 실행 단위이다.

   셀 내에 작성된 코드를 실행할 때 ctrl + enter를 사용한다.


 -02 문자열

  1) 문자열 생성

'abcd'
"abcd"

'abcd'
"abcd"
Out[9]: 'abcd'

  2) 다중 라인 문자열 선언

파이썬은 엔터가 코드의 종료를 뜻한다. (for문 내에서 엔터를 치고 공백이 존재하였을 시 오류 발생)

 

▲ 따라서 위와 같은 다중라인 문자열을 작성할 시 sal 이후의 코드에 오류가 발생함을 확인할 수 있다.

    그러므로 다음과 같은 다중 라인 문자열을 선언해야 할 시 ''' 세 개로 코드를 묶어줘야 한다.

 

또한 f9로 실행 시 한 줄만 실행되기 때문에 전체 코드를 드래그한 후 실행해야 한다.


  3) 문자열 추출

'abcde' [0] # 첫 번째 문자열 추출

'abcde'[0]
Out[11]: 'a'

 

파이썬은 0부터 시작한다.

따라서 첫 번째 문자열을 추출하기 위해서는 [1] 이 아닌 [0]으로 지정해주어야 한다.

 

'abcde'[0:3]  # 앞의 세 개까지의 문자열 추출 (0~2까지의 위치 추출)

'abcde'[0:3]
Out[12]: 'abc'

 

'abcde'[-1]

'abcde'[-1]
Out[13]: 'e'

 

또한 R에서는 -1이 제외의 뜻을 가지고 있지만, 파이썬에서는 뒤에서부터의 순서를 뜻한다.


  4) 문자열 결합

'abc' + 'ABC'

'abc' + 'ABC'
Out[14]: 'abcABC'

 

'2020' + '/' + '09' + '/' + '01'

'2020' + '/' + '09' + '/' + '01'
Out[16]: '2020/09/01'

 

파이썬에서는 + 를 통해 문자열을 마음대로 결합할 수 있다.


  5) 문자열 반복

'abc' * 3

'abc' * 3
Out[18]: 'abcabcabc'

 

print('\u2605' * 3)

print('\u2605' * 3)
★★★

 

* 를 통해 원하는 횟수만큼 문자열을 반복할 수 있다.


 -03 변수

변수는 값을 저장할 수 있는 객체로, '='로 변수를 선언한다. (ex : a1 = 1)

따라서 a1의 값이 1이 맞는지 확인해야 한다면 a1 == 1로 지정해야 한다.

 

  1) 명명규칙

 - 숫자로 시작 불가

 - 특수기호 사용 자제 (. 사용 불가, _ 사용 가능) # 파이썬에서는 . 이 호출의 의미를 가지고 있다.

 - 예약어 자제

 

  2) 타입 확인

a1 =1

a2 = 'abcd'

 

type(a1)

type(a2)

a1 =1

a2 = 'abcd'

type(a1)
Out[22]: int

type(a2)
Out[23]: str

 

type() 을 통해 데이터 타입을 확인할 수 있다.


 -04 모듈 (패키지, 라이브러리)

모듈은 함수의 집합을 뜻하며, 외부 패키지 설치 시 최초 한 번만 설치를 진행하면 된다.

설치된 모듈은 필요할 때 로딩을 진행하면 된다.

 

모듈 내 모든 함수 호출, 모듈 내 일부 함수 호출이 가능하다.

round(123.456, 2)
Out[24]: 123.46

 

기본함수에 포함되어 있는 round() 함수의 경우 그대로 사용이 가능하나, 기본 내장 함수가 아닌 trunc()를 사용하는 경우 다음과 같은 에러가 발생한다.

trunc(123.456)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[25], line 1
----> 1 trunc(123.456)

NameError: name 'trunc' is not defined

 

  1) 모듈 전체 호출 (패키지 전체 호출)

R의 library() 와 동일하게 패키지 내에 존재하는 모든 함수를 호출한다.

import 패키지명으로 호출 후, 함수의 충돌을 방지하기 위해 출처를 밝혀주어야 한다.

따라서 trunc()가 아닌 math.trunc()의 형태로 함수를 사용해야 한다.

import math

math.trunc(123.456)
Out[30]: 123

 

 2) 모듈 호출 시 별칭 선언

모듈 혹은 함수명이 매우 길고 복잡한 경우 as를 통해 별칭을 지정할 수 있다.

import math as ma

ma.trunc(123.456)
Out[32]: 123

 

  3) 모듈 내 특정 함수만 호출

from 모듈명 import 함수명 [as 별칭]

from 모듈명 import 함수명1, 함수명2, 함수명3, ...

 

ex)  from sklearn.ensemble import RandomForestClassifier as rfc

       from sklearn.ensemble import RandomForestRegressor as rfg

 

모듈명 없이 함수만으로 사용이 가능해진다.

from math import trunc

trunc(123.45)
Out[34]: 123

 

또한 모듈명을 모두 생략하고 싶다면 'from 모듈명 import *' 을 사용하면 된다.

from math import * # 모듈 내 모든 함수를 호출 -> 함수명으로 사용 가능

floor(3.5)
Out[36]: 3

ceil(3.5)
Out[37]: 4

 -05 연산자

  1) 비교 연산자

# 3과 5가 같은가?

3  == 5

 

# 3과 5가 다른가?

3 != 5

 

  2) 산술 연산자

+, -, *, / 연산 모두 가능하다.

2^4

2^4
Out[38]: 6

 

거듭제곱의 경우 R과 다르게 ** 를 사용해야 정상적으로 결과가 출력된다.

2**4
Out[39]: 16

 

혹은 math 모듈의 pow 함수를 사용하면 되고, 이 경우 실수의 형태로 출력된다.

math.pow(2,4)
Out[40]: 16.0

 

몫의 경우 //, 나머지의 경우 %를 사용한다.

9//2
Out[41]: 4

9%2
Out[42]: 1

03 자료구조

 

 -01 리스트

 1차원이며 상수를 여러 개 담기 위한 자료구조이다.

 R의 벡터와 유사하나, R에서의 벡터는 하나의 데이터 타입만 허용한다.

 파이썬에서의 리스트는 문자 그대로 담는 용도만 가지고 있기 때문에 여러 가지의 데이터 타입이 혼용될 수 있다.

 (서로 다른 데이터 타입을 허용한다.)

 중첩구조 역시 허용된다.

 

 가장 기본인 자료구조이나 벡터 연산이 불가능하다.

 for문을 이용하여 계속해서 데이터를 누적할 때 유리하다.

 

1) 생성
L1 = [1,2,3,4,5]
L2 = [10,20,30,40,50]



2) 확장 및 추가
L1 + L2

L1 + L2
Out[47]: [1, 2, 3, 4, 5, 10, 20, 30, 40, 50]

 리스트는 + 를 사용하여도 연산이 불가능하다.

 각 원소끼리 연산이 불가능하며, 원소가 확장된다.

 

L1 * 3
Out[52]: [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

마찬가지로 * 를 사용해도 원소의 반복이 출력된다.

 

L3 = [1,2,3,'A']

여러 데이터타입을 허용하기 때문에 1,2,3은 수치형, A는 문자형임을 확인할 수 있다.

 

[1,2,3,[4,5]]
Out[55]: [1, 2, 3, [4, 5]]

또한 데이터 중첩을 허용한다.

 

L1 > 3
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[56], line 1
----> 1 L1 > 3

TypeError: '>' not supported between instances of 'list' and 'int'

원소별 비교도 불가능하다. (원소별 비교를 해야 한다면 Series를 사용해야 한다.)

 

L1 == 1
Out[57]: False

논리형 역시 False를 반환한다.


3) 색인

L1[0] # Positional indexing
Out[62]: 1

L1[0:2] # Slice indexing
Out[63]: [1, 2]

L1[-1] # Reverse indexing
Out[64]: 5

 

L1[[1,3]]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[65], line 1
----> 1 L1[[1,3]]

TypeError: list indices must be integers or slices, not list

리스트를 사용한 여러 위치값을 동시에 추출하는 것은 불가능하다. (Series는 가능하다.)

 

s1[[1,3]]
Out[66]: 
1    2
3    4
dtype: int64

(참고 : Series에서의 여러 위치값 동시 추출)


4) 여러 함수 및 매서드

in R)

함수: append(c(1,2,3),4) => c(1,2,3,4)

매서드 : c(1,2,3).append(4)

 

함수 : 필요한 인수를 괄호 안에 전달하는 방식

매서드 : 함수에 필요한 자료구조를 앞으로 빼서 자료구조가 함수를 호출하게 만드는 방식

L1.append(100)

L1
Out[75]: [1, 2, 3, 4, 5, 100]

자료구조가 먼저 왔으며 추가할 원소를 () 안에 담아주었다.

1,2,3,4,5,100으로 100이 추가된 것을 확인할 수 있으며 코드의 실행과 동시에 즉시 반영된다.

 

리스트는 리스트에서 호출 가능한 함수가 미리 정해져있고, 시리즈는 시리즈에서 호출 가능한 함수가 미리 정해져있다고 생각하면 된다.

리스트에서 사용할 수 없는 함수를 호출한다면 에러가 발생하게 된다.

 

** 특정 모듈 내 함수 / 특정 자료구조가 호출 가능한 함수(매서드) 목록 확인 **

# 모듈 내 함수 목록 확인

import math
dir(math)

dir(math)
Out[78]: 
['__doc__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 'acos',
 'acosh',
 'asin',
 'asinh',
 'atan',
 'atan2',
 'atanh',

위와 같이 모듈 내 함수가 모두 출력된다.

 

# 리스트가 호출 가능한 매서드 목록

dir(list)

dir(list)
Out[79]: 
['__add__',
 '__class__',
 '__class_getitem__',
 '__contains__',
 '__delattr__',
 '__delitem__',
 '__dir__',
 '__doc__',
 '__eq__',

dir(L1)과 같은 형태로도 확인 가능하다.

 

(1) append

L1.append(100)

L1
Out[75]: [1, 2, 3, 4, 5, 100]

(2) extend

L1.extend(200)

상수의 경우 전달이 불가능하기 때문에 에러가 발생한다.

L1.extend(200)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[80], line 1
----> 1 L1.extend(200)

TypeError: 'int' object is not iterable


L1.extend([200])
L1

위와 같이 리스트로 전달을 진행해야 한다.

L1.extend([200])

L1
Out[82]: [1, 2, 3, 4, 5, 100, 200]

 

L1.extend([1000,2000])
L1

여러 값을 리스트로 전달 가능하다.

(L1 = L1 + [1000, 2000] 과 같다.) # 리스트의 더하기 연산을 통한 원소 추가하기

L1.extend([1000,2000])

L1
Out[84]: [1, 2, 3, 4, 5, 100, 200, 1000, 2000]

(3) insert

L2 = L2 + [1000, 2000]
L2.insert(2, 90)
L2

L2 = L2 + [1000, 2000]

L2.insert(2, 90)

L2
Out[87]: [10, 20, 90, 30, 40, 50, 1000, 2000]

원하는 위치에 원소 삽입이 가능하다. (세번째 위치에 90 삽입)


(4) remove

L1.remove(2000)

L1
Out[89]: [1, 2, 3, 4, 5, 100, 200, 1000]

2000이라는 원소 1개가 제거되었음을 확인할 수 있다.

 

L1.remove([100,200])
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[90], line 1
----> 1 L1.remove([100,200])

ValueError: list.remove(x): x not in list

그러나 100, 200 등 복수의 원소를 동시에 제거하는 것은 에러가 발생한다.


(5) del 함수

변수 자체를 제거할 수 있다.

del(L1)
L1
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[94], line 1
----> 1 L1

NameError: name 'L1' is not defined

 

또한 복수의 원소를 동시에 제거할 수 있다.

del(L2[0:2])

L2
Out[96]: [40, 50, 1000, 2000]

(6) 정렬

L3 = [10,2,25,100,30,6]

L3.sort()

L3
Out[100]: [2, 6, 10, 25, 30, 100]

list형 데이터는 변경사항이 항상 즉시 반영된다.

오름차순으로 정렬이 되었음을 확인할 수 있다.

 

L3.sort(reverse = True)

L3
Out[102]: [100, 30, 25, 10, 6, 2]

내림차순 정렬 결과가 출력되었음을 확인할 수 있다.

reverse = True의 경우 R처럼 T, TRUE 식의 기재는 불가능하며 camel 표기법을 엄수해야 한다.


(7) 포함횟수

L4 = ['a','a','b','c','d']

L4.count('a')
Out[104]: 2

지정한 글자의 포함횟수를 확인할 수 있다.

 

** 포함 여부 확인
'a' in  L4

'a' in  L4
Out[108]: True

 

** 참고 : Series와의 차이

from pandas import Series
s1 = Series(L1)
s2 = Series(L2)
print(s1)

print(s1)
0    1
1    2
2    3
3    4
4    5
dtype: int64

 

연산이 가능한 자료구조이므로 리스트와 다르게 세로로 서있는 형태의 행렬이 되었음을 확인할 수 있다.


5) list의 원소별 반복

 (1) map 함수 (★)

R의 sapply와 비슷한 함수이다. (원소 하나씩을 꺼내서 반복적인 처리를 진행하는 함수)

여러 1차원 객체(list, Series)의 원소별 함수적용을 도와주는 적용함수이다.

출력결과를 1차원 객체(list, Series) 형태로 담아야 결과가 리턴된다.

 

map(func, list1, list2, ...)      in R) mapply(func1, v1, v2, ...)

 

 # 사용자 정의 함수

 - 함수 : input value <-> output value의 관계를 정의하는 객체

 

 ① 축약형 정의

함수명 = lambda imput-value : output-value

ex1) f1 = lambda x : x + 3
        f1(100)

f1(100)
Out[136]: 103

 

ex2) f2 = lambda x,y : x + y
        f2(100,200)

f2 = lambda x,y : x + y
f2(100,200)

 

 ② 기본 정의

def 함수명 : 

   ...

   return

 

* f1 = def 함수명으로 지정할 필요가 없다. 함수명 자리에 f1을 지정해주면 된다.


예제) 각 리스트의 원소마다 10을 더하여 리턴
func1 = lambda x : x + 10
map(func1, list1)

map(func1, list1)
Out[144]: <map at 0x12bd97f2890>

계산은 진행되었지만 결과를 저장할 객체가 지정되지 않아 다음과 같은 오류가 발생하였다.

 

func1 = lambda x : x + 10
list(map(func1, list1))

list(map(func1, list1))
Out[145]: [11, 12, 13, 14]

계산이 완료되어 위와 같이 출력되었다.


예제) 두 리스트의 각 원소의 총합 리턴
func2 = lambda x,y : x+y
list(map(func2, list1, list2))

list(map(func2, list1, list2))
Out[163]: [11, 22, 33, 44]


예제) 아래 두 리스트를 결합하여 2026/05 형태로 리턴
vyear = ['2020', '2021', '2022', '2023', '2024']
vmonth = ['02', '09', '12', '11', '03']

 

func3 = lambda year, month : year + '/' + month
list(map(func3, vyear, vmonth))

list(map(func3, vyear, vmonth))
Out[165]: ['2020/02', '2021/09', '2022/12', '2023/11', '2024/03']

예제) 다음 리스트에 대하여 소숫점 둘째자리까지 표현
list1 = [100,150,200,300]

'%.2f'%list1

'%.2f'%list1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[200], line 1
----> 1 '%.2f'%list1

TypeError: must be real number, not list

리스트형이기 때문에 소숫점 둘째자리까지의 변환에 있어 에러가 발생한다. 

따라서 map을 통한 각 원소의 추출이 필요하다.


li = lambda x : '%.2f'%x
list(map(li, list1))

list(map(li, list1))
Out[201]: ['100.00', '150.00', '200.00', '300.00']

 

 (2) for 문

 (3) Series 변환 (단순반복, 단순연산의 경우)

 

6) 형변환과 출력형식 변환

 ① 형변환

int(10.0)

float(10)

str(100)

 

② 출력형식 변환

in sql : to_char(1000, '9999.99') -> 1000.00

 

# 문법 : format % 대상

** format : f, s, d

 

'%5d'%100      # in sql) to_char(100, '99999') = '  100'

'%05d'%100    # to_char(100, '00000') = '00100'

'%5d'%100
Out[172]: '  100'

'%05d'%100
Out[173]: '00100'

 

'%5d'%'100'
정수 자리로 바꾼 다음에 문자타입으로 리턴하는 기작이기 때문에 문자열을 d(정수)로 변환하려 하면 에러가 발생한다.

'%5d'%'100'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[174], line 1
----> 1 '%5d'%'100'

TypeError: %d format: a real number is required, not str

 

'%5s'%'100'
'%5d'%int('100')

'%5s'%'100'
Out[176]: '  100'

'%5d'%int('100')
Out[177]: '  100'

정상적으로 리턴되었음을 확인할 수 있다.


 

[ 연습문제 ]
list1 = [1,3,10,20,100,5]

1) 위 리스트의 세 번째 값을 100으로 변경
list1[2] = 100
list1

list1
Out[125]: [1, 3, 100, 20, 100, 5]


2) 위 리스트를 내림차순으로 정렬하여 저장
list1.sort(reverse = True)
list1

list1
Out[127]: [100, 100, 20, 5, 3, 1]


3) 맨 마지막 위치에 200, 300 삽입하여 저장
list1 = list1 + [200, 300]
list1

list1
Out[129]: [100, 100, 20, 5, 3, 1, 200, 300]


4) 두 번째 원소 삭제
del(list1[1])
list1

list1
Out[131]: [100, 20, 5, 3, 1, 200, 300]

 

7) 문자열 매서드

dir(str)  # 문자열 메서드 목록

a1 = 'abcde'
dir(a1)

 ① 대소치환
a1.upper() # 대문자 치환
'ABCDE'.lower() # 소문자 치환
'ABCDE'.title() # camel 표기법 치환

a1.upper() # 대문자 치환
Out[205]: 'ABCDE'

'ABCDE'.lower() # 소문자 치환
Out[206]: 'abcde'

'ABCDE'.title() # camel 표기법 치환
Out[207]: 'Abcde'


 ② 문자열 길이
len(list1) # 리스트의 원소의 개수
len(a1) # 문자열의 크기

len(list1) # 리스트의 원소의 개수
Out[208]: 4

len(a1) # 문자열의 크기
Out[209]: 5


 ③ 문자열 추출
a1[1:4]

a1[1:4]
Out[210]: 'bcd'

 

 ④ 시작 / 끝 여부

a1.startswith('a')
a1.endswith('a')

a1.startswith('a')
Out[211]: True

a1.endswith('a')
Out[212]: False

 

a1[0] == 'a'
a1[-1] == 'a'

a1[0] == 'a'
Out[213]: True

a1[-1] == 'a'
Out[214]: False

 

 ⑤ 공백 / 문자열 삭제

a2 = '  abc  '
a2.strip()  # 양쪽에서 공백 삭제
a1.strip('a') # 양쪽에서 a 삭제

a2.strip()  # 양쪽에서 공백 삭제
Out[222]: 'abc'

a1.strip('a') # 양쪽에서 a 삭제
Out[223]: 'bcde'

 

a3 = 'aaabacaaa'
a3.strip('a')
a3.lstrip('a')
a3.rstrip('a')

a3.strip('a')
Out[225]: 'bac'

a3.lstrip('a')
Out[226]: 'bacaaa'

a3.rstrip('a')
Out[227]: 'aaabac'

 

 ⑥ 문자열 치환

a1.replace('a') # 두번째 인수(바꿀 문자열) 전달 오류 

a1.replace('a') # 두번째 인수(바꿀 문자열) 전달 오류 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[228], line 1
----> 1 a1.replace('a') # 두번째 인수(바꿀 문자열) 전달 오류 

TypeError: replace() takes at least 2 positional arguments (1 given)


a1.replace('a','') # 빈 문자열 전달 시 삭제

a1.replace('a','') # 빈 문자열 전달 시 삭제
Out[229]: 'bcde'

 

a3.replace('a','A')      # a 전체가 A로 치환
a3.replace('a','A',2)   # 앞의 2개까지만 A로 치환

a3.replace('a','A')
Out[232]: 'AAAbAcAAA'

a3.replace('a','A',2)
Out[233]: 'AAabacaaa'

 

⑦ 문자열 분리

a4 = 'abc:de:fg'
a4.split(':')[0]

a4.split(':')
Out  [3]: ['abc', 'de', 'fg']

a4.split(':')[0]
Out  [4]: 'abc'

[ 연습문제 ]
ename = 'SMITH'
tel = '02)234-5948'
jumin = '9512312222222'
email = 'abcd@gmail.com'

1. 이름을 소문자로 변경
ename = ename.lower() 
ename

ename
Out  [44]: 'smith'


2. 남자인지 여부 확인
jumin[7] == '1'

jumin[7] == '1'
Out  [50]: False


3. email id 추출
email.split('@')[0]

email.split('@')[0]
Out  [46]: 'abcd'


4. 국번(234) 추출
국번 = tel.split(')')[1]
국번 = 국번.split('-')[0]
국번

국번
Out  [49]: '234'

 

 * tel.split(')')[1].split('-')[0] 도 가능하다! 

 * R에서의 %>%와 같은 역할을 진행한다.


 -02 딕셔너리

 대표적인 key-value 자료구조이다. (키 색인이 가능하다.)

 R에서의 데이터프레임, 리스트와 비슷한 자료구조로 데이터를 빠르게 저장 및 탐색하기 위한 유형이다.


 -03 행렬, 배열

 2차원은 행렬, 3차원은 배열이다.

 numpy 모듈을 호출해야 사용이 가능하다.

 다차원 구조이며 하나의 데이터 타입만 허용하는데, 숫자로만 구성된 경우 데이터프레임이 아닌 행렬, 배열을 선호하는 편이다.


 -04 Series

 R의 벡터와 유사하며, 단 하나의 데이터타입만 허용하고 중첩구조는 허용하지 않는다.

 pandas 모듈을 호출해야 사용이 가능하다.

 가장 가볍고 단순한 자료구조라는 측면에서는 리스트라는 자료구조가 있으나 연산이라는 행위를 해야하는 경우 Series를 사용한다.

   > 1차원이지만 자료를 담기만 한다면 리스트

   > 1차원이지만 연산이 필요하다면 series를 사용한다.


 -05 데이터프레임

 2차원 자료구조이며 pandas 모듈을 호출해야 사용이 가능하다.

 key-value 자료구조이다. (키 색인이 가능하다.)