"Pandas"의 두 판 사이의 차이
DB CAFE
(→Pandas,DataFrame 생성, 추가, 삭제, 조회, 메타 등) |
|||
1번째 줄: | 1번째 줄: | ||
− | + | = Pandas,DataFrame 생성, 추가, 삭제, 조회, 메타 등 = | |
<source lang=python> | <source lang=python> | ||
8번째 줄: | 8번째 줄: | ||
import numpy as np | import numpy as np | ||
− | + | == 데이터프레임 개체 생성(create) == | |
− | |||
− | |||
# Table이나 Sheet형식이 데이터 저장 개체 | # Table이나 Sheet형식이 데이터 저장 개체 | ||
# indext와 여러 column으로 구성 | # indext와 여러 column으로 구성 | ||
− | + | === 기본 데이터프레임 생성 === | |
+ | |||
df = DataFrame([1000, 2000, 3000, 4000]) | df = DataFrame([1000, 2000, 3000, 4000]) | ||
print df | print df | ||
26번째 줄: | 25번째 줄: | ||
print("-" * 100 + "{[1]}") # ----- # | print("-" * 100 + "{[1]}") # ----- # | ||
− | + | === 여러 컬럼 데이터프레임 생성 === | |
+ | |||
df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}) | df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}) | ||
print df2 | print df2 | ||
35번째 줄: | 35번째 줄: | ||
print("-" * 100 + "{[2]}") # ----- # | print("-" * 100 + "{[2]}") # ----- # | ||
− | + | === 컬럼만 있는 데이터프레임 생성 === | |
+ | |||
df4 = DataFrame(columns=("lib","qt1","qt2")) | df4 = DataFrame(columns=("lib","qt1","qt2")) | ||
print df4 | print df4 | ||
45번째 줄: | 46번째 줄: | ||
print("-" * 100 + "{[3]}") # ----- # | print("-" * 100 + "{[3]}") # ----- # | ||
− | + | === 난수를 이용한 데이터프레임 생성 === | |
+ | |||
df3 = DataFrame(np.random.randn(6,3)) | df3 = DataFrame(np.random.randn(6,3)) | ||
print df3 | print df3 | ||
51번째 줄: | 53번째 줄: | ||
print("-" * 100 + "{[4]}") # ----- # | print("-" * 100 + "{[4]}") # ----- # | ||
− | + | === 리스트로 데이터프레임으로 생성 === | |
+ | |||
lst1 = [1,2,3,4] | lst1 = [1,2,3,4] | ||
df = DataFrame(lst1) | df = DataFrame(lst1) | ||
62번째 줄: | 65번째 줄: | ||
print("-" * 100 + "{[5]}") # ----- # | print("-" * 100 + "{[5]}") # ----- # | ||
− | + | === 사전으로 데이터프레임으로 생성 === | |
+ | |||
data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], | data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], | ||
'year': [2012, 2012, 2013, 2014, 2014], | 'year': [2012, 2012, 2013, 2014, 2014], | ||
72번째 줄: | 76번째 줄: | ||
print("-" * 100 + "{[5.5]}") # ----- # | print("-" * 100 + "{[5.5]}") # ----- # | ||
− | + | == 데이터프레임 개체 수정(alter) == | |
− | + | ||
− | |||
df = DataFrame([1000, 2000, 3000, 4000]) | df = DataFrame([1000, 2000, 3000, 4000]) | ||
df2 = DataFrame({"x1":[1,2,3], "x2":[11,22,33], "x3":[111,222,333]}) | df2 = DataFrame({"x1":[1,2,3], "x2":[11,22,33], "x3":[111,222,333]}) | ||
df3 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | df3 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | ||
− | + | === 컬럼명 변경 === | |
+ | |||
df.columns = ["C1"] | df.columns = ["C1"] | ||
print df | print df | ||
97번째 줄: | 101번째 줄: | ||
print df3 | print df3 | ||
− | + | === 컬럼명 변경2 === | |
df8 = pd.DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | df8 = pd.DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | ||
105번째 줄: | 109번째 줄: | ||
print df8 | print df8 | ||
− | + | === 컬럼 추가 : 값 지정 === | |
df["newC2"] = 5 | df["newC2"] = 5 | ||
print df | print df | ||
112번째 줄: | 116번째 줄: | ||
print df | print df | ||
− | + | === 컬럼 추가 : Boolean 조건 지정 === | |
df2["new9"] = df2["c3"] > 300 | df2["new9"] = df2["c3"] > 300 | ||
print df2 | print df2 | ||
118번째 줄: | 122번째 줄: | ||
print("-" * 100 + "{[7]}") # ----- # | print("-" * 100 + "{[7]}") # ----- # | ||
− | + | === 컬럼 추가 : 다른 column을 계산하여 생성 === | |
df2["newC9"] = df2["c2"] + df2["c3"] | df2["newC9"] = df2["c2"] + df2["c3"] | ||
print df2 | print df2 | ||
124번째 줄: | 128번째 줄: | ||
print("-" * 100 + "{[8]}") # ----- # | print("-" * 100 + "{[8]}") # ----- # | ||
− | + | === 컬럼 추가 : 시리즈로 추가 === | |
df9 = DataFrame([1000, 2000, 3000, 4000], index=["i1", "i2", "i3", "i4"]) | df9 = DataFrame([1000, 2000, 3000, 4000], index=["i1", "i2", "i3", "i4"]) | ||
print df9 | print df9 | ||
140번째 줄: | 144번째 줄: | ||
print("-" * 100 + "{[9]}") # ----- # | print("-" * 100 + "{[9]}") # ----- # | ||
− | + | === 컬럼 추가 : 리스트로 추가(가장 편할 듯!!!) === | |
add_lst = [1111,2222,3333,4444] | add_lst = [1111,2222,3333,4444] | ||
df9["c5"] = add_lst | df9["c5"] = add_lst | ||
146번째 줄: | 150번째 줄: | ||
print("-" * 100 + "{[10]}") # ----- # | print("-" * 100 + "{[10]}") # ----- # | ||
− | + | === 컬럼 추가 : 빈 데이터프레임에 컬럼 추가(인덱스 포함) === | |
+ | |||
df22 = DataFrame() | df22 = DataFrame() | ||
dd22 = df22.append({"c1":"", "c2":"", "c3":""}, ignore_index=True) | dd22 = df22.append({"c1":"", "c2":"", "c3":""}, ignore_index=True) | ||
152번째 줄: | 157번째 줄: | ||
print df22 | print df22 | ||
− | + | === 컬럼 추가 : 빈 데이터프레임에 컬럼 추가(인덱스 제외) === | |
df33 = pd.DataFrame(columns=("c1", "c2", "c3") | df33 = pd.DataFrame(columns=("c1", "c2", "c3") | ||
print df33 | print df33 | ||
158번째 줄: | 163번째 줄: | ||
print("-" * 100 + "{[10.3]}") # ----- # | print("-" * 100 + "{[10.3]}") # ----- # | ||
− | + | === 컬럼 삭제 === | |
df2 = DataFrame({"x1":[1,2,3], "x2":[11,22,33], "x3":[111,222,333]}) | df2 = DataFrame({"x1":[1,2,3], "x2":[11,22,33], "x3":[111,222,333]}) | ||
df3 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | df3 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | ||
173번째 줄: | 178번째 줄: | ||
print("-" * 100 + "{[11]}") # ----- # | print("-" * 100 + "{[11]}") # ----- # | ||
− | + | === 인덱스 컬럼명 변경 =====> 인덱스로 옮길까???? === | |
df2.index.name = "Count" | df2.index.name = "Count" | ||
print df2.index | print df2.index | ||
print df2 | print df2 | ||
− | + | == 데이터프레임 개체 속성 조회 및 변경(meta) == | |
− | + | ||
− | |||
− | |||
df = DataFrame([1000, 2000, 3000, 4000], index=["i1","i2","i3","i4"]) | df = DataFrame([1000, 2000, 3000, 4000], index=["i1","i2","i3","i4"]) | ||
df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | ||
− | + | === 컬럼 이름 리턴 === | |
print df2.columns.values | print df2.columns.values | ||
− | + | === 인덱스 이름 리턴 === | |
print df2.index | print df2.index | ||
− | + | === 기타 속성 리턴 === | |
print df2.shape[0] # 행 개수 : for문 range에 활용 | print df2.shape[0] # 행 개수 : for문 range에 활용 | ||
print df2.shape[1] # 열 개수 | print df2.shape[1] # 열 개수 | ||
201번째 줄: | 204번째 줄: | ||
print("-" * 100 + "{[12]}") # ----- # | print("-" * 100 + "{[12]}") # ----- # | ||
− | + | === 개체 타입 확인 === | |
+ | |||
print type(df.ix["i1"]) # 결과 : pandas.core.series.Series | print type(df.ix["i1"]) # 결과 : pandas.core.series.Series | ||
print type(df.ix[1:3, 0:2]) # 결과 : pandas.core.frame.DataFrame | print type(df.ix[1:3, 0:2]) # 결과 : pandas.core.frame.DataFrame | ||
207번째 줄: | 211번째 줄: | ||
print("-" * 100 + "{[12.5]}") # ----- # | print("-" * 100 + "{[12.5]}") # ----- # | ||
− | + | == 데이터프레임 데이터 조회(select)== | |
− | + | ||
− | |||
− | |||
df = DataFrame([1000, 2000, 3000, 4000], index=["i1","i2","i3","i4"]) | df = DataFrame([1000, 2000, 3000, 4000], index=["i1","i2","i3","i4"]) | ||
df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | ||
− | + | === 원하는 컬럼만 출력 === | |
newColList = [0,1] | newColList = [0,1] | ||
print df2[newColList] | print df2[newColList] | ||
− | + | === 데이터 추출 : 컬럼단위 === | |
+ | |||
print df2[["c1","c3"]] | print df2[["c1","c3"]] | ||
print df2[["c2"]] # 인덱스와 컬럼명까지 출력 | print df2[["c2"]] # 인덱스와 컬럼명까지 출력 | ||
225번째 줄: | 228번째 줄: | ||
print("-" * 100 + "{[13]}") # ----- # | print("-" * 100 + "{[13]}") # ----- # | ||
− | + | === 데이터 추출 : 행단위 === | |
print df2.iat[0,0] | print df2.iat[0,0] | ||
print df2.at["i1","c1"] | print df2.at["i1","c1"] | ||
235번째 줄: | 238번째 줄: | ||
print("-" * 100 + "{[14]}") # ----- # | print("-" * 100 + "{[14]}") # ----- # | ||
− | + | === 데이터 추출 : 부분 === | |
+ | |||
print df2.ix[0,0] | print df2.ix[0,0] | ||
print df2.ix[1:3, 0:2] | print df2.ix[1:3, 0:2] | ||
245번째 줄: | 249번째 줄: | ||
print("-" * 100 + "{[15]}") # ----- # | print("-" * 100 + "{[15]}") # ----- # | ||
− | + | === 데이터 추출 : 아래 3개 동일 === | |
+ | |||
print df2[0:2] | print df2[0:2] | ||
print df2.ix[0:2] | print df2.ix[0:2] | ||
252번째 줄: | 257번째 줄: | ||
print("-" * 100 + "{[16]}") # ----- # | print("-" * 100 + "{[16]}") # ----- # | ||
− | + | === 데이터 추출 : 조건 처리 === | |
+ | |||
df2["c4"] = df2["c3"] > 300 | df2["c4"] = df2["c3"] > 300 | ||
print df2 | print df2 | ||
258번째 줄: | 264번째 줄: | ||
print("-" * 100 + "{[17]}") # ----- # | print("-" * 100 + "{[17]}") # ----- # | ||
− | + | == 데이터프레임 데이터 변경(update, delete, insert) == | |
− | + | ||
− | |||
− | |||
df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | ||
− | + | === 컬럼값 전체 변경 === | |
df2["c3"] = df2["c1"] + df2["c2"] | df2["c3"] = df2["c1"] + df2["c2"] | ||
print df2 | print df2 | ||
273번째 줄: | 277번째 줄: | ||
print("-" * 100 + "{[18]}") # ----- # | print("-" * 100 + "{[18]}") # ----- # | ||
− | + | === 컬럼 추가 후 데이터 입력 === | |
df2["newC4"] = ["a","b","c"] | df2["newC4"] = ["a","b","c"] | ||
print df2 | print df2 | ||
− | + | === 컬럼 데이터 수정 === | |
df2["newC4"] = [111,222,333] | df2["newC4"] = [111,222,333] | ||
print df2 | print df2 | ||
318번째 줄: | 322번째 줄: | ||
print("-" * 100 + "{[20]}") # ----- # | print("-" * 100 + "{[20]}") # ----- # | ||
− | + | == 데이터프레임 출력 변환 == | |
− | + | ||
− | |||
− | |||
print df2.T # 피벗 | print df2.T # 피벗 | ||
print df2.values # array로 받음 | print df2.values # array로 받음 | ||
329번째 줄: | 331번째 줄: | ||
− | + | == 인덱싱(index, reindex) == | |
− | + | ||
− | |||
df = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | df = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"]) | ||
print df | print df | ||
375번째 줄: | 376번째 줄: | ||
− | + | == 정렬(sort_index, sort_values)== | |
− | + | ||
− | |||
df = DataFrame({"c2":[10,40,70], "c3":[50,20,20], "c1":[60,30,90]}, index=["i2","i1","i3"]) | df = DataFrame({"c2":[10,40,70], "c3":[50,20,20], "c1":[60,30,90]}, index=["i2","i1","i3"]) | ||
print df | print df | ||
402번째 줄: | 402번째 줄: | ||
print("-" * 100 + "{[27]}") # ----- # | print("-" * 100 + "{[27]}") # ----- # | ||
− | + | == NULL 처리(NaN, NA, NULL) == | |
− | + | ||
− | |||
− | |||
from numpy import nan as NA | from numpy import nan as NA | ||
df = DataFrame(np.random.randn(7,3)) | df = DataFrame(np.random.randn(7,3)) | ||
421번째 줄: | 419번째 줄: | ||
print("-" * 100 + "{[28]}") # ----- # | print("-" * 100 + "{[28]}") # ----- # | ||
− | + | == 랭킹 및 집계처리(lambda, apply) == | |
− | + | ||
− | |||
− | |||
data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], | data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], | ||
'year': [2012, 2012, 2013, 2014, 2014], | 'year': [2012, 2012, 2013, 2014, 2014], |
2023년 5월 24일 (수) 22:21 판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
1 Pandas,DataFrame 생성, 추가, 삭제, 조회, 메타 등[편집]
# -*- coding: utf-8 -*-
from pandas import Series, DataFrame
import numpy as np
== 데이터프레임 개체 생성(create) ==
# Table이나 Sheet형식이 데이터 저장 개체
# indext와 여러 column으로 구성
=== 기본 데이터프레임 생성 ===
df = DataFrame([1000, 2000, 3000, 4000])
print df
df = DataFrame([1000, 2000, 3000, 4000], index=["i1", "i2", "i3", "i4"])
print df
df = DataFrame({"c1":[1000, 2000, 3000, 4000]}, index=["i1", "i2", "i3", "i4"])
print df
print("-" * 100 + "{[1]}") # ----- #
=== 여러 컬럼 데이터프레임 생성 ===
df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]})
print df2
df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])
print df2
print("-" * 100 + "{[2]}") # ----- #
=== 컬럼만 있는 데이터프레임 생성 ===
df4 = DataFrame(columns=("lib","qt1","qt2"))
print df4
for i in range(5):
df4.loc[i] = [(i+1)*(n+1) for n in range(3)]
print df4
print("-" * 100 + "{[3]}") # ----- #
=== 난수를 이용한 데이터프레임 생성 ===
df3 = DataFrame(np.random.randn(6,3))
print df3
print("-" * 100 + "{[4]}") # ----- #
=== 리스트로 데이터프레임으로 생성 ===
lst1 = [1,2,3,4]
df = DataFrame(lst1)
print df
lst2 = [[1,2,3,4,5], ["a", "b","c","d","e"]]
df = DataFrame(lst2)
print df
print("-" * 100 + "{[5]}") # ----- #
=== 사전으로 데이터프레임으로 생성 ===
data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'year': [2012, 2012, 2013, 2014, 2014],
'reports': [4, 24, 31, 2, 3],
'coverage': [25, 94, 57, 62, 70]}
df0 = DataFrame(data, index=['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])
print df0
print("-" * 100 + "{[5.5]}") # ----- #
== 데이터프레임 개체 수정(alter) ==
df = DataFrame([1000, 2000, 3000, 4000])
df2 = DataFrame({"x1":[1,2,3], "x2":[11,22,33], "x3":[111,222,333]})
df3 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])
=== 컬럼명 변경 ===
df.columns = ["C1"]
print df
df2.columns = ["c1", "c2", "c3"]
print df2
df2.rename(columns={"c1":"CC1"}, inplace = True) # 많이 쓰임!!!
print df2
print("-" * 100 + "{[6]}") # ----- #
df.columns.values[0] = 999 # 컬럼명이 숫자일 땐 숫자로..
print df
df3.columns.values[0] = "ttt" # 컬럼명이 문자일 땐 문자로..
print df3
=== 컬럼명 변경2 ===
df8 = pd.DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])
df8.columns.values[0] = "id_area8"
print df8
df8.rename(columns={df8.columns[0]:"id_area7"}, inplace = True)
print df8
=== 컬럼 추가 : 값 지정 ===
df["newC2"] = 5
print df
df["newC3"] = ["a","b","c","d"]
print df
=== 컬럼 추가 : Boolean 조건 지정 ===
df2["new9"] = df2["c3"] > 300
print df2
print("-" * 100 + "{[7]}") # ----- #
=== 컬럼 추가 : 다른 column을 계산하여 생성 ===
df2["newC9"] = df2["c2"] + df2["c3"]
print df2
print("-" * 100 + "{[8]}") # ----- #
=== 컬럼 추가 : 시리즈로 추가 ===
df9 = DataFrame([1000, 2000, 3000, 4000], index=["i1", "i2", "i3", "i4"])
print df9
add_srs = Series([1001, 2001, 3001, 4001], index = ["i1","i2","i3","i4"])
print add_srs
df9["c3"] = add_srs
print df9
add_srs = Series([1011, 3011, 4011], index = ["i3","i4","i5"]) # "i5"는 반영 안됨(outer join 방식)
df9["c4"] = add_srs
print df9
print("-" * 100 + "{[9]}") # ----- #
=== 컬럼 추가 : 리스트로 추가(가장 편할 듯!!!) ===
add_lst = [1111,2222,3333,4444]
df9["c5"] = add_lst
print("-" * 100 + "{[10]}") # ----- #
=== 컬럼 추가 : 빈 데이터프레임에 컬럼 추가(인덱스 포함) ===
df22 = DataFrame()
dd22 = df22.append({"c1":"", "c2":"", "c3":""}, ignore_index=True)
print df22
=== 컬럼 추가 : 빈 데이터프레임에 컬럼 추가(인덱스 제외) ===
df33 = pd.DataFrame(columns=("c1", "c2", "c3")
print df33
print("-" * 100 + "{[10.3]}") # ----- #
=== 컬럼 삭제 ===
df2 = DataFrame({"x1":[1,2,3], "x2":[11,22,33], "x3":[111,222,333]})
df3 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])
del df2["x2"]
print df
df2 = df2.drop("x1", 1)
print df2
df3 = df3.drop(["c2", "c3"], 1)
print df3
print("-" * 100 + "{[11]}") # ----- #
=== 인덱스 컬럼명 변경 =====> 인덱스로 옮길까???? ===
df2.index.name = "Count"
print df2.index
print df2
== 데이터프레임 개체 속성 조회 및 변경(meta) ==
df = DataFrame([1000, 2000, 3000, 4000], index=["i1","i2","i3","i4"])
df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])
=== 컬럼 이름 리턴 ===
print df2.columns.values
=== 인덱스 이름 리턴 ===
print df2.index
=== 기타 속성 리턴 ===
print df2.shape[0] # 행 개수 : for문 range에 활용
print df2.shape[1] # 열 개수
print df2.size # 행 * 열 개수
print df2.ndim # 뭔지 모름?
print df2.info() # DF정보
print df2.describe() # DF 일괄 통계 정보 추출
print("-" * 100 + "{[12]}") # ----- #
=== 개체 타입 확인 ===
print type(df.ix["i1"]) # 결과 : pandas.core.series.Series
print type(df.ix[1:3, 0:2]) # 결과 : pandas.core.frame.DataFrame
print("-" * 100 + "{[12.5]}") # ----- #
== 데이터프레임 데이터 조회(select)==
df = DataFrame([1000, 2000, 3000, 4000], index=["i1","i2","i3","i4"])
df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])
=== 원하는 컬럼만 출력 ===
newColList = [0,1]
print df2[newColList]
=== 데이터 추출 : 컬럼단위 ===
print df2[["c1","c3"]]
print df2[["c2"]] # 인덱스와 컬럼명까지 출력
print df2["c2"] # 인덱스만 출력
print("-" * 100 + "{[13]}") # ----- #
=== 데이터 추출 : 행단위 ===
print df2.iat[0,0]
print df2.at["i1","c1"]
print df2.loc["i2"]
print df2.loc["i2"]["c1"]
print df2.iloc[0,0:3]
print("-" * 100 + "{[14]}") # ----- #
=== 데이터 추출 : 부분 ===
print df2.ix[0,0]
print df2.ix[1:3, 0:2]
print df2.ix["i1":"i2", "c2":"c3"]
print df2.ix[:,["c2", "c3"]]
print df2.ix[["i2","i3"], :]
print("-" * 100 + "{[15]}") # ----- #
=== 데이터 추출 : 아래 3개 동일 ===
print df2[0:2]
print df2.ix[0:2]
print df2.ix[0:2, :]
print("-" * 100 + "{[16]}") # ----- #
=== 데이터 추출 : 조건 처리 ===
df2["c4"] = df2["c3"] > 300
print df2
print("-" * 100 + "{[17]}") # ----- #
== 데이터프레임 데이터 변경(update, delete, insert) ==
df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])
=== 컬럼값 전체 변경 ===
df2["c3"] = df2["c1"] + df2["c2"]
print df2
df2["c3"] = 111
print df2
print("-" * 100 + "{[18]}") # ----- #
=== 컬럼 추가 후 데이터 입력 ===
df2["newC4"] = ["a","b","c"]
print df2
=== 컬럼 데이터 수정 ===
df2["newC4"] = [111,222,333]
print df2
df2.ix[1,2] = 2000
print df
print("-" * 100 + "{[19]}") # ----- #
# -- 행 추가
rows = [4, 44, 444, "d"]
df2.loc[len(df2)] = rows
print df2
df2 = df2.rename(index={3:"i4"})
print df2
# -- 행 추가 : 빈 데이터프레임에 행 추가(인덱스 포함)
df22 = DataFrame()
dd22 = df22.append({"c1":"", "c2":"", "c3":""}, ignore_index=True)
df22.ix[0, "c1"] = "111"
df22.ix[0, "c2"] = "222"
df22.ix[0, "c3"] = "333"
print df22
# -- 행 추가 : 빈 데이터프레임에 행 추가(인덱스 제외)
df33 = pd.DataFrame(columns=("c1", "c2", "c3"))
df33.loc[0] = [ "111", "222", "333"]
print df33
# -- 행 삭제
df2 = df2.drop("i2", axis = 0)
print df2
print("-" * 100 + "{[20]}") # ----- #
== 데이터프레임 출력 변환 ==
print df2.T # 피벗
print df2.values # array로 받음
print df2.shape # 행렬(Array) 형태 출력
print("-" * 100 + "{[21]}") # ----- #
== 인덱싱(index, reindex) ==
df = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])
print df
df = df.reindex(["i1", "i2", "i3", "i4", "i5"])
print df
print("-" * 100 + "{[22]}") # ----- #
df = df.reindex(["i1", "i2", "i3", "i4", "i5"]).interpolate() # 보간법
print df
df["interPo"] = df["c1"].interpolate()
print df
print("-" * 100 + "{[23]}") # ----- #
# -- 중복 인덱싱
df = df.reindex(["i1", "i2", "i4", "i4", "i5"])
print df
print df.index.is_unique # 인덱스가 unique이면 True 리턴
print df.ix["i4"]
print("-" * 100 + "{[24]}") # ----- #
# -- 인덱스 컬럼명 변경
df7 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])
df7.index.name = "id_area9"
print("-" * 100 + "{[24.5]}") # ----- #
# -- 기존 컬럼을 인덱스로 변경
df33 = DataFrame({"c1":[1,2], "c2":[11,22]}, index=["i1", "i2"]
print df33
df33.index.name = "idx"
print df33
df33 = df33.set_index("c1")
print df33
== 정렬(sort_index, sort_values)==
df = DataFrame({"c2":[10,40,70], "c3":[50,20,20], "c1":[60,30,90]}, index=["i2","i1","i3"])
print df
# -- 정렬 : 인덱스 기준
print df.sort_index() # 인덱스명으로 정렬
print df.sort_index(axis=0) # 인덱스(?)로 정렬
print df.sort_index(axis=1) # 컬럼명(?)으로 정렬
print df.sort_index(axis=0, ascending = False) # descending
print("-" * 100 + "{[25]}") # ----- #
df2 = df.sort_index(axis = 0)
df3 = df2.sort_index(axis = 1)
print df3
print("-" * 100 + "{[26]}") # ----- #
# -- 정렬 : 컬럼 기준
print df.sort_values(by = "c1")
print df.sort_values(by = "c1", ascending=False)
print df.sort_values(by = ["c3","c2"])
print("-" * 100 + "{[27]}") # ----- #
== NULL 처리(NaN, NA, NULL) ==
from numpy import nan as NA
df = DataFrame(np.random.randn(7,3))
print df
# -- 강제로 NA 추가
df.ix[2,1] = NA
df.ix[3,2] = NA
print df
# -- NaN 변경(null if)
df.replace(np.NaN, 'NULL Value', inplace=True)
#df.column_nm.replace(np.NaN, 'NULL Value', inplace=True)
print("-" * 100 + "{[28]}") # ----- #
== 랭킹 및 집계처리(lambda, apply) ==
data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'year': [2012, 2012, 2013, 2014, 2014],
'reports': [4, 24, 31, 2, 3],
'coverage': [25, 94, 57, 62, 70]}
df = DataFrame(data, index=['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])
print df
print("-" * 100 + "{[29]}") # ----- #
# -- 랭킹
# print df.rank(method="first") # 에러나는데.. 무슨 numeric일때만?
print df.rank(axis=0) # 행단위로 순위
print df.rank(axis=1) # 컬럼단위로 순위
print df.rank(ascending=False, method="max")
print("-" * 100 + "{[30]}") # ----- #
#-- 랭킹 : 한 컬럼으로 순위 선정
df['coverageRanked'] = df['coverage'].rank(ascending=1)
print df
print("-" * 100 + "{[31]}") # ----- #
# -- lambda를 이용한 apply함수 사용
# 행이나 열에서의 max() - min() 활용
df = DataFrame({"c1":[20,30,90], "c2":[30,30,80], "c3":[100,40,50]}, index=["i1","i2","i3"])
print df
print df.apply(lambda x:x.max() - x.min(), axis = 0) # 행간 계산
df["newC4"] = df.apply(lambda x:x.max() - x.min(), axis = 1) # 컬럼간 계산
print df
print df.apply(lambda x:x+1) # 행/컬럼 모두
1.1 Pandas Numpy 사용법[편집]
# -*- coding: utf-8 -*-
# ********************************************
# -- numpy : 배열 구조 및 연산
# ********************************************
import numpy as np
# -- 난수를 통한 배열 생성
data = np.random.randn(2,3)
print(data)
print("-"*100) # ---------------------------
# -- 리스트를 통한 배열 생성
data1 = [6,7,5,8,0,1]
print(data1)
arr1 = np.array(data1)
print(arr1)
# -- 2차원 리스트를 통한 배열 생성
data2 = [[1,2,3,4],[5,6,7,8]]
arr2 = np.array(data2)
print(arr2)
print("-"*100) # ---------------------------
# -- array 구조 출력
print(arr2.shape)
# -- 0으로 채워진 배열 생성
print(np.zeros((2,3)))
# -- 순번으로 채워진 배열 생성
print(np.arange(15))
print("-"*100) # ---------------------------
# -- 다차원 배열 생성 및 계산
arr = np.array([[1,2,3],[4,5,6]])
print(arr)
print(arr+arr)
print(arr*arr)
print("-"*100) # ---------------------------
# ********************************************
# -- n차 배열
# ********************************************
# -- 다차원 배열 생성 및 조회
arr2d = np.array([[11,12,13],[14,15,16],[17,18,19]])
print(arr2d)
print(arr2d[1])
print(arr2d[1][2])
print(arr2d[:2, 1:])
print("-"*100) # ---------------------------
# ********************************************
# -- 불리언 색인(Boolean Index)
# ********************************************
names = np.array(["Bob", "Joe", "Will", "Bob", "Will", "Joe", "Joe"])
data = np.random.randn(7,4)
print(names)
print(data)
# -- 조건에 맞는지 boolean 리턴
print(names == "Bob")
print("-"*100) # ---------------------------
# -- 두 배열을 조합한 조회
print(data[names=="Bob"]) # Bob이 있는 행
print(data[names=="Bob",0]) # Bob이 있는 행의 0번째 열
print("-"*100) # ---------------------------
# -- 배열의 OR 조건 Boolean 조회
mask = (names=="Bob") | (names=="Will")
print(mask)
# -- 조건에 따라 배열 값 변경 조회
data[data<0] = 0
print(data)
data[names!="Joe"] = 7
print(data)
print("-"*100) # ---------------------------
# ********************************************
# -- 피벗팅 및 배열 재조합
# ********************************************
# -- 피벗팅
arr = np.arange(15).reshape((3,5))
print(arr)
print(arr.T)
print("-"*100) # ---------------------------
# -- 재조합
aaa = np.arange(16)
print aaa
arr = np.arange(16).reshape(2,2,4)
print(arr)
# -- 피벗팅
arr2 = arr.swapaxes(1,2)
print arr2
# ********************************************
# -- 배열 조회 조건 및 집계
# ********************************************
arr = np.random.randn(4,4)
print(arr)
print(np.where(arr>0,1,-1))
print(arr)
print("-"*100) # ---------------------------
# -- where를 이용한 조건 조회
print(np.where((00, arr<10), 3, -3))
print(np.where((0
1.2 For 문을 사용한 List,Dictionary 출력[편집]
import pandas as pd
# ------------------------------
# -- 리스트의 index, value 출력
# ------------------------------
lst = ["AAA", "BBB", "", "DDD"]
for index in range(len(lst)):
print(index, lst[index])
print("... 리스트 index, value 출력[range(len()) 사용]", "." * 100, "\n")
for idx, val in enumerate(lst):
print(idx, val)
print("... 리스트 index, value 출력[enumerate() 사용]", "." * 100, "\n")
for index in lst:
print(index)
print("... 리스트 출력", "." * 100, "\n")
# ------------------------------
# -- list-in-list에서의 중복제거
# ------------------------------
oldlist = [['a', 'b', 'a'], ['a', 'p', 'f', 'b'], ['b', 's', 'r']]
newlist = list()
for sublist in oldlist:
for list in sublist:
if list not in newlist:
newlist.append(list)
print(newlist)
print(",,, list in list 중복제거", "," * 100, "\n")
# ------------------------------
# -- 사전의 key, value 출력
# ------------------------------
d = {"apple": 100, "orange": 200, "banana": 300}
for key, value in d.items():
print(key, value)
print(";;; 사전 key, value 출력[items() 사용]", ";" * 100, "\n")
# ------------------------------
# -- 데이터프레임의 index, value 출력
# ------------------------------
inp = [{'c1': 10, 'c2': 100}, {'c1': 11, 'c2': 110}, {'c1': 12, 'c2': 120}]
df = pd.DataFrame(inp)
print(df, '\n')
print("^^^ df 원본 출력", "^" * 100, "\n")
for idx, row in df.iterrows():
print("idx=", idx, " c1=", row['c1'], " c2=", row['c2']) # row[0] 형식 가능
print("^^^ DF index, column 출력[iterrows() 사용]", "^" * 100, "\n")
for idx in df.index:
print("idx=", idx)
print("^^^ DF index 출력[df.index 사용]", "^" * 100, "\n")
for row in range(0, len(df)):
print("row=", row)
1.3 DataFrame INSERT[편집]
import pymssql
import pandas as pd
# ------------------------------
# -- Create Dataframe
# ------------------------------
df = pd.DataFrame({"a_key":[111,222,333], "b_sect":['a1','a2','a3',],
"c_mop":["aaaaa","bbbbb","ccccc"], "d_mop":["aaaaa","bbbbb","ccccc"],
"e_mop":["aaaaa","bbbbb","ccccc"], "f_mop":["aaaaa","bbbbb","ccccc"]})
print (df)
print ("... dataframe", "." * 100, "\n")
# ------------------------------
# -- Connection String
# ------------------------------
conn = pymssql.connect(host='hostname', user='user', password='password', database='db')
cur = conn.cursor()
# ------------------------------
# -- Create SQL
# ------------------------------
sql = "insert into mop.cn values(%d, %s, %s, %s, %s, %s);"
data = [tuple(x) for x in df.values]
print("sql:", sql)
print("data:", data)
print (",,, sql_statement", "," * 100, "\n")
# ------------------------------
# -- Execute SQL
# ------------------------------
cur.executemany(sql, data)
conn.commit()