PYTHON

[빅데이터 분석] 2021.12.16 Python, Pansdas

죠으니 2021. 12. 17. 00:18

오늘은 pandas를 배웠다. 와우,,

뼛속까지 문과인 나는 힘들다ㅇㅁㅇ근데 신기하다 

입력하는 방법도 다양하고 내가 하나 잘못 입력하면 바로 오류 뜨고 똑똑해,,

복습을 하는데 자고 일어나면 다시 처음처럼.. 멋져 내 머리 :)

강사님이 말씀해주신 것처럼 하다보면 자연스럽게 외워지겠지!.!

할 수 있당. 오늘 하루도 수고 많았오~~

 

 

printreturn의 차이

 print는 출력하면 끝, return은 출력된 값을 다른 곳에 쓸 수 있다.

pwd는 지금 내가 어디서 작업하고 있는지를 알려줌

 

<ch5. 함수>

▶# x는 전역변수, t는 지역변수 
def test(t):
    print(x)
    t = 20
    print("In Function:", t)
x = 10

전역변수는 함수 안에서도 쓸 수 있고, 밖에서도 쓸 수 있다.

지역변수는 def 안에 있으니 안에서만 쓸 수 있다. 다른 입력창에서 print(t)해도 t값이 안 나온다. 

▶# 함수 안의 변수 s와, 밖의 변수 s는 다른 메모리 주소를 가진 다른 변수
def f():
    s = "I love London!"
    print(s)

s = "I love Paris!"
f()
print(s)

▶def print_something(my_name, your_name): #문자열 포맷팅
    print("Hello {0}, My name is {1}".format(your_name, my_name))

print_something("Sungchul", "TEAMLAB")
print_something(your_name = "TEAMLAB", my_name = "Sungchul")

▶가변 인수(args)는 갯수를 모를때 쓴다.

def asterisk_test_2(*args):
    x, y, *z = args
    return x, y, z
print(asterisk_test_2(3, 4, 5))

 

<ch6. 문자열>

▶역순 정렬  ☞ a[::-1] 

▶'A' in a:  ☞ a안에 있는지 없는지 체크할 때 in을 씀

▶문자열과 정수형 간 연산은 불가함. str끼리만 더할 수 있다.

▶title.upper() #대문자로 바꿔라

▶title.lower() #소문자로 바꿔라

▶title.title() #단어의 첫글자만

▶title.capitalize() #모든문장의 첫글자만

▶title.count('a') #소문자가 몇개 있나

▶title.isdigit() # 숫자가 있냐고 물어보는것

▶title.startswith('a') #a로 시작하냐는 뜻

 

<단어 카운팅>

▶ 주어진 txt파일을 열어서 리스크 변수에 저장하기
f = open("yesterday.txt", 'r') 
yesterday_lyric = f.readlines()  ☞ 텍스트를 읽어주는 것
f.close()  ☞ open으로 열었으면 마지막엔 닫아야됨

▶ 문장들 다 합쳐서 한 문장으로 만들기
contents = "" 
for line in yesterday_lyric:
    contents = contents + line.strip() + "\n" ☞ strip는 빈공간 없애는 것
contents    
☞ contents 라는 빈공간을 만들어 line으로 안에 채워주는 것. 문장이 하나가 됨

 

 {1:.2f} 앞에 1은 위치값이고 :뒤에 있는 .2f는 반올림해서 소수점 둘째자리까지 표현해라는 뜻

▶ 10자리의 공간을 확보하고 우측 정렬로 1를 출력하라 ☞ '%10d' % 1 ☞ '          1' 출력된다.

☞ 가독성을 위해 하기도 함. 앞에 자리 만들기 위해 씀

▶10자리의 공간을 확보하고 좌측 정렬로 1를 출력하라 ☞ '%-10d' % 1

▶10자리를 확보하고 소수점 셋째 자리까지 출력하라 ☞ '%10.3f' % 5.91231 ☞ '          5.912'

▶'>' 이걸로도 우측정렬 가능

☞ 10자리의 공간을 확보하고 우측 정렬로 문자열 'Apple'을 출력하라  ☞ "{0:>10s} ".format('Apple') 

☞ '          apple' 

 

<Pandas>

 

▶import 모듈이름 as 변경이름

 

▶s = pd.Series([3, -5, 7, 4], index=['a', 'b', 'c', 'd'])
# series를 함수로 봐도 됨.

# a, b, c, d는 인덱스 번호다.

a    3
b   -5
c    7
d    4
dtype: int64

drop은 지우는 것

☞s.drop(['a', 'c'])

 

<Dataframe>

▶행과 열이 있는것

▶index 행=인덱스=리스트의 성분, columns 열=칼럼=키값

▶data = {'Country': ['Belgium', 'India', 'Brazil'],
       'Capital': ['Brussels', 'New Delhi', 'Brasilia'],
       'Population': [11190846, 1303171035, 207847528]}

☞df = pd.DataFrame(data, columns=['Country', 'Capital', 'Population'])

   df = pd.DataFrame(data)

▶s = pd.Series([3, -5, 7, 4], index=['a', 'b', 'c', 'd'])

a    3
b   -5
c    7
d    4
dtype: int64

▶dp1 = df.drop('country', axis=1) #axis=0 행, axis=1 열
# country가 열에 있으니 axis=1로 함.
#drop으로 바꾸고 싶으면 dp=df.drop('country', axis=1)이렇게 정의 해줘야 됨

▶df.iloc[0, 0] # iloc은 숫자로 위치찾는 걸로 0행0열이라는 뜻

▶df.loc[0, 'Country'] 
#loc는 이름으로 위치 찾는 것이다.
# [0, 'Country']에서 앞에있는건 행이 아니라 행 이름이 0인것이다.

▶df.loc[:, 'Country'] ☞ 행을 다 가져온 것

df.sort_values(by='Country')
# sort_values를 하면 정렬을 해줌.
# by.뒤에 있는 것을 기준으로 정렬해줌.

df.rank() #순의 매길때 씀

▶df.rank(ascending=False) #이렇게 false로 하면 인구수 등수가 달라짐

#ascending오름차순(작은수부터 큰수로)
#descending내림차순(큰수부터 작은수로)

df.shape은 몇행 몇열인지를 묻는 것

▶print(df.columns) #columns에 대한 정보들이 나온다.

▶df.sum() #문자열끼리 더할 수 있다.

Country              BelgiumIndiaBrazil
Capital       BrusselsNew DelhiBrasilia
Population                   1522209409
dtype: object

▶# df.apply(lambda x : 수행문) : dataframe의 모든 요소들에 대해 함수를 적용하라!
df.apply(lambda x: x*2) #수행문은 어떤 작업을 하겠다라는 것
# 모든 데이터에 대해 곱하기2를 하겠다는 뜻.
# 곱하기 2는 문자는 숫자에 다 할 수 있으니 에러가 안나는 것. 제곱이면 에러가 날 수 있다

▶df.describe() #데이터의 통계값을 알려줌.

▶df2.info() #다 non null이니 다 데이터가 차있는것
# datetime은 시간 날짜 형식이라는 뜻.
#object는 str이다.
#category도 str과 비슷함. 

<class 'pandas.core.frame.DataFrame'>
Int64Index: 4 entries, 0 to 3
Data columns (total 6 columns):
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   A       4 non-null      int64         
 1   B       4 non-null      datetime64[ns]
 2   C       4 non-null      float32       
 3   D       4 non-null      int32         
 4   E       4 non-null      category      
 5   F       4 non-null      object        
dtypes: category(1), datetime64[ns](1), float32(1), int32(1), int64(1), object(1)
memory usage: 288.0+ bytes

▶pd.Categorical([1, "train", "test", "train"])
# Categories은 유일한 값들 가지고 몇개인지 볼 수 있음. 중복제외하고

[1, 'train', 'test', 'train']
Categories (3, object): [1, 'test', 'train']

▶# transpose : 행<->열 교환
df.T

▶df.sort_index(axis=1, ascending=False)
#axis가 0이고 ascending이 false면 행의 순서가 바껴진다.

▶# 특정 칼럼 기준으로 값 정렬
df.sort_values(by='A')

▶# 행 인덱싱
# Selecting via [], which slices the rows.
df[0:3]

▶df.loc[:, ['A', 'B']] #모든행을 가져오고 열은 A, B만 가져온다는 것

▶# 특정 행 값들 가져오기
df.iloc[3] #3번째 행만 가져온것

df[df['A'] > 0] #A column중에 0큰것만 가져온 것

df2 = df.copy()
df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three']
# E라는 COLUMN추가한 것

▶# df2의 0보다 큰 값들은 전부 마이너스를 곱해라
df2[df2 > 0] = -df2
# 이러면 다 마이너스가 됨