행위

"Pandas"의 두 판 사이의 차이

DB CAFE

(DataFrame DB INSERT (mssql))
 
(같은 사용자의 중간 판 15개는 보이지 않습니다)
1번째 줄: 1번째 줄:
== Pandas,DataFrame 생성, 추가, 삭제, 조회, 메타 등 ==
+
= Pandas,DataFrame 생성, 추가, 삭제, 조회, 메타 등 =
<source lang=python>
 
  
 +
== 데이터프레임 개체 생성(create) ==
 +
# Table이나 Sheet형식이 데이터 저장 개체
 +
# indext와 여러 column으로 구성
  
 +
<source lang=python>
 
# -*- coding: utf-8 -*-
 
# -*- coding: utf-8 -*-
 
   
 
   
 
from pandas import Series, DataFrame
 
from pandas import Series, DataFrame
 
import numpy as np
 
import numpy as np
 +
</source>
 +
 
   
 
   
# ********************************************
+
=== 기본 데이터프레임 생성 ===
# -- 데이터프레임 개체 생성(create)
+
<source lang=python>
# ********************************************
 
#    Table이나 Sheet형식이 데이터 저장 개체
 
#    indext와 여러 column으로 구성
 
 
# -- 기본 데이터프레임 생성
 
 
df = DataFrame([1000, 2000, 3000, 4000])
 
df = DataFrame([1000, 2000, 3000, 4000])
 
print df
 
print df
25번째 줄: 25번째 줄:
 
   
 
   
 
print("-" * 100 + "{[1]}") # ----- #
 
print("-" * 100 + "{[1]}") # ----- #
 +
</source>
 
   
 
   
# -- 여러 컬럼 데이터프레임 생성
+
=== 여러 컬럼 데이터프레임 생성 ===
 +
<source lang=python>
 
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
34번째 줄: 36번째 줄:
 
   
 
   
 
print("-" * 100 + "{[2]}") # ----- #
 
print("-" * 100 + "{[2]}") # ----- #
 +
</source>
 
   
 
   
# -- 컬럼만 있는 데이터프레임 생성
+
=== 컬럼만 있는 데이터프레임 생성 ===
 +
<source lang=python>
 
df4 = DataFrame(columns=("lib","qt1","qt2"))
 
df4 = DataFrame(columns=("lib","qt1","qt2"))
 
print df4
 
print df4
44번째 줄: 48번째 줄:
 
   
 
   
 
print("-" * 100 + "{[3]}") # ----- #
 
print("-" * 100 + "{[3]}") # ----- #
+
</source>
# -- 난수를 이용한 데이터프레임 생성
+
 
 +
=== 난수를 이용한 데이터프레임 생성 ===
 +
<source lang=python>
 
df3 = DataFrame(np.random.randn(6,3))
 
df3 = DataFrame(np.random.randn(6,3))
 
print df3
 
print df3
 
   
 
   
 
print("-" * 100 + "{[4]}") # ----- #
 
print("-" * 100 + "{[4]}") # ----- #
 +
</source>
 
   
 
   
# -- 리스트로 데이터프레임으로 생성
+
=== 리스트로 데이터프레임으로 생성 ===
 +
<source lang=python>
 
lst1 = [1,2,3,4]
 
lst1 = [1,2,3,4]
 
df = DataFrame(lst1)
 
df = DataFrame(lst1)
61번째 줄: 69번째 줄:
 
   
 
   
 
print("-" * 100 + "{[5]}") # ----- #
 
print("-" * 100 + "{[5]}") # ----- #
 +
</source>
 
   
 
   
# -- 사전으로 데이터프레임으로 생성
+
=== 사전으로 데이터프레임으로 생성 ===
 +
<source lang=python>
 
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],
71번째 줄: 81번째 줄:
 
   
 
   
 
print("-" * 100 + "{[5.5]}") # ----- #
 
print("-" * 100 + "{[5.5]}") # ----- #
 +
</source>
 
   
 
   
# ********************************************
+
== 데이터프레임 개체 수정(alter) ==
# -- 데이터프레임 개체 수정(alter)
+
<source lang=python>
# ********************************************
 
 
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"])
 +
</source>
 
   
 
   
# -- 컬럼명 변경
+
=== 컬럼명 변경 ===
 +
<source lang=python>
 
df.columns = ["C1"]
 
df.columns = ["C1"]
 
print df
 
print df
96번째 줄: 108번째 줄:
 
df3.columns.values[0] = "ttt"    # 컬럼명이 문자일 땐 문자로..
 
df3.columns.values[0] = "ttt"    # 컬럼명이 문자일 땐 문자로..
 
print df3
 
print df3
 +
</source>
 
   
 
   
# -- 컬럼명 변경2
+
=== 컬럼명 변경2 ===
 +
<source lang=python>
 
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"])
 
   
 
   
104번째 줄: 118번째 줄:
 
df8.rename(columns={df8.columns[0]:"id_area7"}, inplace = True)
 
df8.rename(columns={df8.columns[0]:"id_area7"}, inplace = True)
 
print df8
 
print df8
 +
</source>
 
   
 
   
# -- 컬럼 추가 : 값 지정
+
=== 컬럼 추가 : 값 지정 ===
 +
<source lang=python>
 
df["newC2"] = 5
 
df["newC2"] = 5
 
print df
 
print df
111번째 줄: 127번째 줄:
 
df["newC3"] = ["a","b","c","d"]
 
df["newC3"] = ["a","b","c","d"]
 
print df
 
print df
 +
</source>
 
   
 
   
# -- 컬럼 추가 : Boolean 조건 지정
+
=== 컬럼 추가 : Boolean 조건 지정 ===
 +
<source lang=python>
 
df2["new9"] = df2["c3"] > 300
 
df2["new9"] = df2["c3"] > 300
 
print df2
 
print df2
 
   
 
   
print("-" * 100 + "{[7]}") # ----- #
+
print("-" * 100 + "{[7]}")
 +
</source>
 
   
 
   
# -- 컬럼 추가 : 다른 column을 계산하여 생성
+
=== 컬럼 추가 : 다른 column을 계산하여 생성 ===
 +
<source lang=python>
 
df2["newC9"] = df2["c2"] + df2["c3"]
 
df2["newC9"] = df2["c2"] + df2["c3"]
 
print df2
 
print df2
 
   
 
   
 
print("-" * 100 + "{[8]}") # ----- #
 
print("-" * 100 + "{[8]}") # ----- #
 +
</source>
 
   
 
   
# -- 컬럼 추가 : 시리즈로 추가
+
=== 컬럼 추가 : 시리즈로 추가 ===
 +
<source lang=python>
 
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
139번째 줄: 161번째 줄:
 
   
 
   
 
print("-" * 100 + "{[9]}") # ----- #
 
print("-" * 100 + "{[9]}") # ----- #
 +
</source>
 
   
 
   
# -- 컬럼 추가 : 리스트로 추가(가장 편할 듯!!!)
+
=== 컬럼 추가 : 리스트로 추가(가장 편할 듯!!!) ===
 +
<source lang=python>
 
add_lst = [1111,2222,3333,4444]
 
add_lst = [1111,2222,3333,4444]
 
df9["c5"] = add_lst
 
df9["c5"] = add_lst
 
   
 
   
 
print("-" * 100 + "{[10]}") # ----- #
 
print("-" * 100 + "{[10]}") # ----- #
 +
</source>
 
   
 
   
# -- 컬럼 추가 : 빈 데이터프레임에 컬럼 추가(인덱스 포함)
+
=== 컬럼 추가 : 빈 데이터프레임에 컬럼 추가(인덱스 포함) ===
 +
<source lang=python>
 
df22 = DataFrame()
 
df22 = DataFrame()
 
dd22 = df22.append({"c1":"", "c2":"", "c3":""}, ignore_index=True)
 
dd22 = df22.append({"c1":"", "c2":"", "c3":""}, ignore_index=True)
 
   
 
   
 
print df22
 
print df22
 +
</source>
 
   
 
   
# -- 컬럼 추가 : 빈 데이터프레임에 컬럼 추가(인덱스 제외)
+
=== 컬럼 추가 : 빈 데이터프레임에 컬럼 추가(인덱스 제외) ===
 +
<source lang=python>
 
df33 = pd.DataFrame(columns=("c1", "c2", "c3")
 
df33 = pd.DataFrame(columns=("c1", "c2", "c3")
 
print df33
 
print df33
 
   
 
   
 
print("-" * 100 + "{[10.3]}") # ----- #
 
print("-" * 100 + "{[10.3]}") # ----- #
 +
</source>
 
   
 
   
# -- 컬럼 삭제
+
=== 컬럼 삭제 ===
 +
<source lang=python>
 
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"])
172번째 줄: 202번째 줄:
 
   
 
   
 
print("-" * 100 + "{[11]}") # ----- #
 
print("-" * 100 + "{[11]}") # ----- #
+
</source>
# -- 인덱스 컬럼명 변경     =====> 인덱스로 옮길까????
+
 
 +
=== 인덱스 컬럼명 변경 ===
 +
<source lang=python>
 
df2.index.name = "Count"
 
df2.index.name = "Count"
 
print df2.index
 
print df2.index
 
print df2
 
print df2
+
</source>
+
 
# ********************************************
+
== 데이터프레임 개체 속성 조회 및 변경(meta) ==
# -- 데이터프레임 개체 속성 조회 및 변경(meta)
+
<source lang=python>
# ********************************************
 
 
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"])
 +
</source>
 
   
 
   
# -- 컬럼 이름 리턴
+
=== 컬럼 이름 리턴 ===
 +
<source lang=python>
 
print df2.columns.values
 
print df2.columns.values
 +
</source>
 
   
 
   
# -- 인덱스 이름 리턴
+
=== 인덱스 이름 리턴 ===
 +
<source lang=python>
 
print df2.index
 
print df2.index
 +
</source>
 
   
 
   
# -- 기타 속성 리턴
+
=== 기타 속성 리턴 ===
 +
<source lang=python>
 
print df2.shape[0]  # 행 개수 : for문 range에 활용
 
print df2.shape[0]  # 행 개수 : for문 range에 활용
 
print df2.shape[1]  # 열 개수
 
print df2.shape[1]  # 열 개수
200번째 줄: 237번째 줄:
 
   
 
   
 
print("-" * 100 + "{[12]}") # ----- #
 
print("-" * 100 + "{[12]}") # ----- #
 +
</source>
 
   
 
   
# -- 개체 타입 확인
+
=== 개체 타입 확인 ===
 +
<source lang=python>
 
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
 
   
 
   
 
print("-" * 100 + "{[12.5]}") # ----- #
 
print("-" * 100 + "{[12.5]}") # ----- #
 +
</source>
 
   
 
   
+
== 데이터프레임 데이터 조회(select)==
# ********************************************
+
<source lang=python>
# -- 데이터프레임 데이터 조회(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"])
 +
</source>
 
   
 
   
# -- 원하는 컬럼만 출력
+
=== 원하는 컬럼만 출력 ===
 +
<source lang=python>
 
newColList = [0,1]
 
newColList = [0,1]
 
print df2[newColList]
 
print df2[newColList]
 +
</source>
 
   
 
   
# -- 데이터 추출 : 컬럼단위
+
=== 데이터 추출 : 컬럼단위 ===
 +
<source lang=python>
 
print df2[["c1","c3"]]
 
print df2[["c1","c3"]]
 
print df2[["c2"]]        # 인덱스와 컬럼명까지 출력
 
print df2[["c2"]]        # 인덱스와 컬럼명까지 출력
224번째 줄: 266번째 줄:
 
   
 
   
 
print("-" * 100 + "{[13]}") # ----- #
 
print("-" * 100 + "{[13]}") # ----- #
 +
</source>
 
   
 
   
# -- 데이터 추출 : 행단위
+
=== 데이터 추출 : 행단위 ===
 +
<source lang=python>
 
print df2.iat[0,0]
 
print df2.iat[0,0]
 
print df2.at["i1","c1"]
 
print df2.at["i1","c1"]
234번째 줄: 278번째 줄:
 
   
 
   
 
print("-" * 100 + "{[14]}") # ----- #
 
print("-" * 100 + "{[14]}") # ----- #
 +
</source>
 
   
 
   
# -- 데이터 추출 : 부분
+
=== 데이터 추출 : 부분 ===
 +
<source lang=python>
 
print df2.ix[0,0]
 
print df2.ix[0,0]
 
print df2.ix[1:3, 0:2]
 
print df2.ix[1:3, 0:2]
244번째 줄: 290번째 줄:
 
   
 
   
 
print("-" * 100 + "{[15]}") # ----- #
 
print("-" * 100 + "{[15]}") # ----- #
+
 
# -- 데이터 추출 : 아래 3개 동일
+
</source>
 +
=== 데이터 추출 : 아래 3개 동일 ===
 +
<source lang=python>
 
print df2[0:2]
 
print df2[0:2]
 
print df2.ix[0:2]
 
print df2.ix[0:2]
251번째 줄: 299번째 줄:
 
   
 
   
 
print("-" * 100 + "{[16]}") # ----- #
 
print("-" * 100 + "{[16]}") # ----- #
 +
</source>
 
   
 
   
# -- 데이터 추출 : 조건 처리
+
=== 데이터 추출 : 조건 처리 ===
 +
<source lang=python>
 
df2["c4"] = df2["c3"] > 300
 
df2["c4"] = df2["c3"] > 300
 
print df2
 
print df2
 
   
 
   
 
print("-" * 100 + "{[17]}") # ----- #
 
print("-" * 100 + "{[17]}") # ----- #
 +
</source>
 
   
 
   
+
== 데이터프레임 데이터 변경(update, delete, insert) ==
# ********************************************
+
<source lang=python>
# -- 데이터프레임 데이터 변경(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"])
+
</source>
# -- 컬럼값 전체 변경
+
=== 컬럼값 전체 변경 ===
 +
<source lang=python>
 
df2["c3"] = df2["c1"] + df2["c2"]
 
df2["c3"] = df2["c1"] + df2["c2"]
 
print df2
 
print df2
272번째 줄: 322번째 줄:
 
   
 
   
 
print("-" * 100 + "{[18]}") # ----- #
 
print("-" * 100 + "{[18]}") # ----- #
+
</source>
# -- 컬럼 추가 후 데이터 입력
+
=== 컬럼 추가 후 데이터 입력 ===
 +
<source lang=python>
 
df2["newC4"] = ["a","b","c"]
 
df2["newC4"] = ["a","b","c"]
 
print df2
 
print df2
+
</source>
# -- 컬럼 데이터 수정
+
=== 컬럼 데이터 수정 ===
 +
<source lang=python>
 
df2["newC4"] = [111,222,333]
 
df2["newC4"] = [111,222,333]
 
print df2
 
print df2
285번째 줄: 337번째 줄:
 
   
 
   
 
print("-" * 100 + "{[19]}") # ----- #
 
print("-" * 100 + "{[19]}") # ----- #
+
</source>
# -- 행 추가
+
=== 행 추가 ===
 +
<source lang=python>
 
rows = [4, 44, 444, "d"]
 
rows = [4, 44, 444, "d"]
 
df2.loc[len(df2)] = rows
 
df2.loc[len(df2)] = rows
293번째 줄: 346번째 줄:
 
df2 = df2.rename(index={3:"i4"})
 
df2 = df2.rename(index={3:"i4"})
 
print df2
 
print df2
+
</source>
# -- 행 추가 : 빈 데이터프레임에 행 추가(인덱스 포함)
+
=== 행 추가 : 빈 데이터프레임에 행 추가(인덱스 포함) ===
 +
<source lang=python>
 
df22 = DataFrame()
 
df22 = DataFrame()
 
dd22 = df22.append({"c1":"", "c2":"", "c3":""}, ignore_index=True)
 
dd22 = df22.append({"c1":"", "c2":"", "c3":""}, ignore_index=True)
303번째 줄: 357번째 줄:
 
   
 
   
 
print df22
 
print df22
+
</source>
# -- 행 추가 : 빈 데이터프레임에 행 추가(인덱스 제외)
+
=== 행 추가 : 빈 데이터프레임에 행 추가(인덱스 제외) ===
 +
<source lang=python>
 
df33 = pd.DataFrame(columns=("c1", "c2", "c3"))
 
df33 = pd.DataFrame(columns=("c1", "c2", "c3"))
 
   
 
   
310번째 줄: 365번째 줄:
 
   
 
   
 
print df33
 
print df33
 +
</source>
 
   
 
   
+
=== 행 삭제 ===
# -- 행 삭제
+
<source lang=python>
 
df2 =  df2.drop("i2", axis = 0)
 
df2 =  df2.drop("i2", axis = 0)
 
print df2
 
print df2
 
   
 
   
 
print("-" * 100 + "{[20]}") # ----- #
 
print("-" * 100 + "{[20]}") # ----- #
+
</source>
+
 
# ********************************************
+
== 데이터프레임 출력 변환 ==
# -- 데이터프레임 출력 변환
+
<source lang=python>
# ********************************************
 
 
print df2.T        # 피벗
 
print df2.T        # 피벗
 
print df2.values    # array로 받음
 
print df2.values    # array로 받음
327번째 줄: 382번째 줄:
 
   
 
   
 
print("-" * 100 + "{[21]}") # ----- #
 
print("-" * 100 + "{[21]}") # ----- #
 +
</source>
 
   
 
   
+
== 인덱싱(index, reindex) ==
# ********************************************
+
<source lang=python>
# -- 인덱싱(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
347번째 줄: 401번째 줄:
 
   
 
   
 
print("-" * 100 + "{[23]}") # ----- #
 
print("-" * 100 + "{[23]}") # ----- #
 +
</source>
 
   
 
   
# -- 중복 인덱싱
+
=== 중복 인덱싱 ===
 +
<source lang=python>
 
df = df.reindex(["i1", "i2", "i4", "i4", "i5"])
 
df = df.reindex(["i1", "i2", "i4", "i4", "i5"])
 
print df
 
print df
356번째 줄: 412번째 줄:
 
   
 
   
 
print("-" * 100 + "{[24]}") # ----- #
 
print("-" * 100 + "{[24]}") # ----- #
   
+
  </source>
# -- 인덱스 컬럼명 변경
+
 
 +
=== 인덱스 컬럼명 변경 ===
 +
<source lang=python>
 
df7 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])
 
df7 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])
 
   
 
   
363번째 줄: 421번째 줄:
 
   
 
   
 
print("-" * 100 + "{[24.5]}") # ----- #
 
print("-" * 100 + "{[24.5]}") # ----- #
 +
</source>
 
   
 
   
# -- 기존 컬럼을 인덱스로 변경
+
=== 기존 컬럼을 인덱스로 변경 ===
 +
<source lang=python>
 
df33 = DataFrame({"c1":[1,2], "c2":[11,22]}, index=["i1", "i2"]
 
df33 = DataFrame({"c1":[1,2], "c2":[11,22]}, index=["i1", "i2"]
 
print df33
 
print df33
374번째 줄: 434번째 줄:
 
print df33
 
print df33
 
   
 
   
+
</source>
# ********************************************
+
 
# -- 정렬(sort_index, sort_values)
+
== 정렬(sort_index, sort_values)==
# ********************************************
+
<source lang=python>
 
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
 +
</source>
 
   
 
   
# -- 정렬 : 인덱스 기준
+
=== 정렬 : 인덱스 기준 ===
 +
<source lang=python>
 
print df.sort_index()                          # 인덱스명으로 정렬
 
print df.sort_index()                          # 인덱스명으로 정렬
 
print df.sort_index(axis=0)                    # 인덱스(?)로 정렬
 
print df.sort_index(axis=0)                    # 인덱스(?)로 정렬
394번째 줄: 456번째 줄:
 
   
 
   
 
print("-" * 100 + "{[26]}") # ----- #
 
print("-" * 100 + "{[26]}") # ----- #
+
</source>
# -- 정렬 : 컬럼 기준
+
 
 +
=== 정렬 : 컬럼 기준 ===
 +
<source lang=python>
 
print df.sort_values(by = "c1")
 
print df.sort_values(by = "c1")
 
print df.sort_values(by = "c1", ascending=False)
 
print df.sort_values(by = "c1", ascending=False)
401번째 줄: 465번째 줄:
 
   
 
   
 
print("-" * 100 + "{[27]}") # ----- #
 
print("-" * 100 + "{[27]}") # ----- #
+
</source>
+
 
# ********************************************
+
== NULL 처리(NaN, NA, NULL) ==
# -- NULL 처리(NaN, NA, NULL)
+
<source lang=python>
# ********************************************
 
 
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))
 
print df
 
print df
+
</source>
# -- 강제로 NA 추가
+
=== 강제로 NA 추가 ===
 +
<source lang=python>
 
df.ix[2,1] = NA
 
df.ix[2,1] = NA
 
df.ix[3,2] = NA
 
df.ix[3,2] = NA
 
print df
 
print df
 
+
</source>
# -- NaN 변경(null if)
+
=== NaN 변경(null if) ===
 +
<source lang=python>
 
df.replace(np.NaN, 'NULL Value', inplace=True)
 
df.replace(np.NaN, 'NULL Value', inplace=True)
 
#df.column_nm.replace(np.NaN, 'NULL Value', inplace=True)
 
#df.column_nm.replace(np.NaN, 'NULL Value', inplace=True)
  
 
print("-" * 100 + "{[28]}") # ----- #
 
print("-" * 100 + "{[28]}") # ----- #
 +
</source>
 
   
 
   
+
== 랭킹 및 집계처리(lambda, apply) ==
# ********************************************
+
<source lang=python>
# -- 랭킹 및 집계처리(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],
447번째 줄: 511번째 줄:
 
   
 
   
 
print("-" * 100 + "{[31]}") # ----- #
 
print("-" * 100 + "{[31]}") # ----- #
 +
</source>
 
   
 
   
# -- lambda를 이용한 apply함수 사용
+
=== lambda를 이용한 apply함수 사용 ===
 +
<source lang=python>
 
#    행이나 열에서의 max() - min() 활용
 
#    행이나 열에서의 max() - min() 활용
 
df = DataFrame({"c1":[20,30,90], "c2":[30,30,80], "c3":[100,40,50]}, index=["i1","i2","i3"])
 
df = DataFrame({"c1":[20,30,90], "c2":[30,30,80], "c3":[100,40,50]}, index=["i1","i2","i3"])
462번째 줄: 528번째 줄:
  
 
== Pandas Numpy 사용법 ==
 
== Pandas Numpy 사용법 ==
 +
 +
=== numpy : 배열 구조 및 연산 ===
 
<source lang=python>
 
<source lang=python>
 
 
# -*- coding: utf-8 -*-
 
 
# ********************************************
 
# -- numpy : 배열 구조 및 연산
 
# ********************************************
 
 
import numpy as np
 
import numpy as np
 
+
</source>
# -- 난수를 통한 배열 생성
+
=== 난수를 통한 배열 생성 ===
 +
<source lang=python>
 
data = np.random.randn(2,3)
 
data = np.random.randn(2,3)
 
print(data)
 
print(data)
  
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
 +
</source>
  
# -- 리스트를 통한 배열 생성
+
=== 리스트를 통한 배열 생성 ===
 +
<source lang=python>
 
data1 = [6,7,5,8,0,1]
 
data1 = [6,7,5,8,0,1]
 
print(data1)
 
print(data1)
483번째 줄: 548번째 줄:
 
arr1 = np.array(data1)
 
arr1 = np.array(data1)
 
print(arr1)
 
print(arr1)
 
+
</source>
# -- 2차원 리스트를 통한 배열 생성
+
=== 2차원 리스트를 통한 배열 생성 ===
 +
<source lang=python>
 
data2 = [[1,2,3,4],[5,6,7,8]]
 
data2 = [[1,2,3,4],[5,6,7,8]]
 
arr2 = np.array(data2)
 
arr2 = np.array(data2)
490번째 줄: 556번째 줄:
  
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
 +
</source>
  
# -- array 구조 출력
+
=== array 구조 출력 ===
 +
<source lang=python>
 
print(arr2.shape)
 
print(arr2.shape)
 
+
</source>
# -- 0으로 채워진 배열 생성
+
=== 0으로 채워진 배열 생성 ===
 +
<source lang=python>
 
print(np.zeros((2,3)))
 
print(np.zeros((2,3)))
 +
</source>
  
# -- 순번으로 채워진 배열 생성
+
=== 순번으로 채워진 배열 생성 ===
 +
<source lang=python>
 
print(np.arange(15))
 
print(np.arange(15))
  
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
 
+
</source>
# -- 다차원 배열 생성 및 계산
+
=== 다차원 배열 생성 및 계산 ===
 +
<source lang=python>
 
arr = np.array([[1,2,3],[4,5,6]])
 
arr = np.array([[1,2,3],[4,5,6]])
 
print(arr)
 
print(arr)
509번째 줄: 581번째 줄:
  
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
 +
</source>
  
 +
=== n차 배열 ===
 +
<source lang=python>
 +
-- 다차원 배열 생성 및 조회
  
# ********************************************
 
# -- n차 배열
 
# ********************************************
 
 
# -- 다차원 배열 생성 및 조회
 
 
arr2d = np.array([[11,12,13],[14,15,16],[17,18,19]])
 
arr2d = np.array([[11,12,13],[14,15,16],[17,18,19]])
 
print(arr2d)
 
print(arr2d)
523번째 줄: 594번째 줄:
  
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
 +
</source>
  
 
+
=== 불리언 색인(Boolean Index) ===
# ********************************************
+
<source lang=python>
# -- 불리언 색인(Boolean Index)
 
# ********************************************
 
 
names = np.array(["Bob", "Joe", "Will", "Bob", "Will", "Joe", "Joe"])
 
names = np.array(["Bob", "Joe", "Will", "Bob", "Will", "Joe", "Joe"])
 
data = np.random.randn(7,4)
 
data = np.random.randn(7,4)
533번째 줄: 603번째 줄:
 
print(names)
 
print(names)
 
print(data)
 
print(data)
 
+
</source>
# -- 조건에 맞는지 boolean 리턴
+
=== 조건에 맞는지 boolean 리턴===
 +
<source lang=python>
 
print(names == "Bob")
 
print(names == "Bob")
  
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
 +
</source>
  
# -- 두 배열을 조합한 조회
+
=== 두 배열을 조합한 조회 ===
 +
<source lang=python>
 
print(data[names=="Bob"])    # Bob이 있는 행
 
print(data[names=="Bob"])    # Bob이 있는 행
 
print(data[names=="Bob",0])  # Bob이 있는 행의 0번째 열
 
print(data[names=="Bob",0])  # Bob이 있는 행의 0번째 열
  
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
 
+
</source>
# -- 배열의 OR 조건 Boolean 조회
+
=== 배열의 OR 조건 Boolean 조회 ===
 +
<source lang=python>
 
mask = (names=="Bob") | (names=="Will")
 
mask = (names=="Bob") | (names=="Will")
 
print(mask)
 
print(mask)
 
+
</source>
# -- 조건에 따라 배열 값 변경 조회
+
=== 조건에 따라 배열 값 변경 조회 ===
 +
<source lang=python>
 
data[data<0] = 0
 
data[data<0] = 0
 
print(data)
 
print(data)
557번째 줄: 632번째 줄:
  
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
 +
</source>
  
 
+
=== 피벗팅 및 배열 재조합 ===
# ********************************************
+
<source lang=python>
# -- 피벗팅 및 배열 재조합
+
-- 피벗팅
# ********************************************
 
 
 
# -- 피벗팅
 
 
arr = np.arange(15).reshape((3,5))
 
arr = np.arange(15).reshape((3,5))
 
print(arr)
 
print(arr)
570번째 줄: 643번째 줄:
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
  
# -- 재조합
+
-- 재조합
 
aaa = np.arange(16)
 
aaa = np.arange(16)
 
print aaa
 
print aaa
580번째 줄: 653번째 줄:
 
arr2 = arr.swapaxes(1,2)
 
arr2 = arr.swapaxes(1,2)
 
print arr2
 
print arr2
 +
</source>
  
 
+
=== 배열 조회 조건 및 집계 ===
# ********************************************
+
<source lang=python>
# -- 배열 조회 조건 및 집계
 
# ********************************************
 
 
 
 
arr = np.random.randn(4,4)
 
arr = np.random.randn(4,4)
 
print(arr)
 
print(arr)
605번째 줄: 676번째 줄:
 
print(np.mean(arr))
 
print(np.mean(arr))
 
print(arr.sum())
 
print(arr.sum())
print(arr.cumsum())   # 이게 뭐더라?
+
print(arr.cumsum())
 
print(arr.min())
 
print(arr.min())
 
print(arr.max())
 
print(arr.max())
  
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
 +
</source>
  
 
+
=== 정렬 중복제거 ===
# ********************************************
+
<source lang=python>
# -- 정렬 중복제거
 
# ********************************************
 
 
 
 
arr = np.random.randn(5,3)
 
arr = np.random.randn(5,3)
 
print(arr)
 
print(arr)
633번째 줄: 702번째 줄:
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
  
 
+
</source>
# ********************************************
+
=== 선형대수(행렬 연산) ===
# -- 선형대수(행렬 연산)
+
<source lang=python>
# ********************************************
 
 
x = np.array([[1,2,3],[4,5,6]])
 
x = np.array([[1,2,3],[4,5,6]])
 
y = np.array([[6,3],[-1,7],[8,9]])
 
y = np.array([[6,3],[-1,7],[8,9]])
647번째 줄: 715번째 줄:
 
print("-"*100) # ---------------------------
 
print("-"*100) # ---------------------------
  
# -- 뭔지 모름..ㅠㅠ
+
-- ?
 
from numpy.linalg import inv, qr
 
from numpy.linalg import inv, qr
 
x = np.random.randn(5,5)
 
x = np.random.randn(5,5)
655번째 줄: 723번째 줄:
 
print(inv(mat))
 
print(inv(mat))
 
print(mat.dot(inv(mat)))
 
print(mat.dot(inv(mat)))
 +
</source>
  
 
+
=== 난수 생성 ===
# ********************************************
+
<source lang=python>
# -- 난수 생성
 
# ********************************************
 
 
samples = np.random.normal(size =(3,4))
 
samples = np.random.normal(size =(3,4))
 
print(samples)
 
print(samples)
673번째 줄: 740번째 줄:
 
<source lang=python>
 
<source lang=python>
 
import pandas as pd
 
import pandas as pd
 +
</source>
 
   
 
   
# ------------------------------
+
=== 리스트의 index, value 출력 ===
# -- 리스트의 index, value 출력
+
<source lang=python>
# ------------------------------
 
 
lst = ["AAA", "BBB", "", "DDD"]
 
lst = ["AAA", "BBB", "", "DDD"]
 
   
 
   
693번째 줄: 760번째 줄:
 
   
 
   
 
print("... 리스트 출력", "." * 100, "\n")
 
print("... 리스트 출력", "." * 100, "\n")
 +
</source>
 
   
 
   
+
=== list-in-list에서의 중복제거 ===
# ------------------------------
+
<source lang=python>
# -- list-in-list에서의 중복제거
 
# ------------------------------
 
 
oldlist = [['a', 'b', 'a'], ['a', 'p', 'f', 'b'], ['b', 's', 'r']]
 
oldlist = [['a', 'b', 'a'], ['a', 'p', 'f', 'b'], ['b', 's', 'r']]
 
   
 
   
708번째 줄: 774번째 줄:
 
print(newlist)
 
print(newlist)
 
print(",,, list in list 중복제거", "," * 100, "\n")
 
print(",,, list in list 중복제거", "," * 100, "\n")
+
</source>
+
 
# ------------------------------
+
=== 사전의 key, value 출력 ===
# -- 사전의 key, value 출력
+
<source lang=python>
# ------------------------------
 
 
d = {"apple": 100, "orange": 200, "banana": 300}
 
d = {"apple": 100, "orange": 200, "banana": 300}
 
for key, value in d.items():
 
for key, value in d.items():
718번째 줄: 783번째 줄:
 
   
 
   
 
print(";;; 사전 key, value 출력[items() 사용]", ";" * 100, "\n")
 
print(";;; 사전 key, value 출력[items() 사용]", ";" * 100, "\n")
 +
</source>
 
   
 
   
+
=== 데이터프레임의 index, value 출력 ===
# ------------------------------
+
<source lang=python>
# -- 데이터프레임의 index, value 출력
 
# ------------------------------
 
 
inp = [{'c1': 10, 'c2': 100}, {'c1': 11, 'c2': 110}, {'c1': 12, 'c2': 120}]
 
inp = [{'c1': 10, 'c2': 100}, {'c1': 11, 'c2': 110}, {'c1': 12, 'c2': 120}]
 
df = pd.DataFrame(inp)
 
df = pd.DataFrame(inp)
742번째 줄: 806번째 줄:
 
     print("row=", row)
 
     print("row=", row)
 
</source>
 
</source>
 +
 +
== DataFrame DB INSERT (ORACLE) ==
 +
<source lang=python>
 +
import pandas as pd
 +
import cx_Oracle
 +
 +
-- Excel 파일읽기 
 +
df = pd.read_excel('D:\\MPAA\상장법인목록.xlsx', sheet_name='상장법인목록',usecols=[0, 1], dtype={0:str, 1:str})
 +
-- 컬럼명 지정
 +
df1 = df[['종목코드', '회사명']]
 +
 +
-- 데이터프레임을 튜플로 변경 
 +
rows = [tuple(x) for x in df1.to_records(index=False)]
 +
 +
-- 오라클 연결
 +
con = cx_Oracle.connect('STOCK', '1234', 'ORCL')
 +
 +
cursor = con.cursor()
 +
 +
cursor.execute('DELETE FROM ITEM_CODE')
 +
cursor.executemany("INSERT INTO ITEM_CODE (ITEM_CD, ITEM_NM) VALUES (:1, :2)", rows)
 +
con.commit()
 +
 +
cursor.execute('SELECT COUNT(*) FROM ITEM_CODE')
 +
cnt = cursor.fetchone()
 +
 +
print('Insert 건수: ', cnt)
 +
 +
</source>
 +
 +
== DataFrame DB INSERT (mssql) ==
 +
<source lang=sql>
 +
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()
 +
</source>
 +
  
 
[[category:python]]
 
[[category:python]]

2023년 5월 24일 (수) 23:45 기준 최신판

thumb_up 추천메뉴 바로가기


목차

1 Pandas,DataFrame 생성, 추가, 삭제, 조회, 메타 등[편집]

1.1 데이터프레임 개체 생성(create)[편집]

  1. Table이나 Sheet형식이 데이터 저장 개체
  2. indext와 여러 column으로 구성
# -*- coding: utf-8 -*-
 
from pandas import Series, DataFrame
import numpy as np


1.1.1 기본 데이터프레임 생성[편집]

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]}") # ----- #

1.1.2 여러 컬럼 데이터프레임 생성[편집]

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]}") # ----- #

1.1.3 컬럼만 있는 데이터프레임 생성[편집]

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]}") # ----- #

1.1.4 난수를 이용한 데이터프레임 생성[편집]

df3 = DataFrame(np.random.randn(6,3))
print df3
 
print("-" * 100 + "{[4]}") # ----- #

1.1.5 리스트로 데이터프레임으로 생성[편집]

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]}") # ----- #

1.1.6 사전으로 데이터프레임으로 생성[편집]

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]}") # ----- #

1.2 데이터프레임 개체 수정(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"])

1.2.1 컬럼명 변경[편집]

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

1.2.2 컬럼명 변경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

1.2.3 컬럼 추가 : 값 지정[편집]

df["newC2"] = 5
print df
 
df["newC3"] = ["a","b","c","d"]
print df

1.2.4 컬럼 추가 : Boolean 조건 지정[편집]

df2["new9"] = df2["c3"] > 300
print df2
 
print("-" * 100 + "{[7]}")

1.2.5 컬럼 추가 : 다른 column을 계산하여 생성[편집]

df2["newC9"] = df2["c2"] + df2["c3"]
print df2
 
print("-" * 100 + "{[8]}") # ----- #

1.2.6 컬럼 추가 : 시리즈로 추가[편집]

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]}") # ----- #

1.2.7 컬럼 추가 : 리스트로 추가(가장 편할 듯!!!)[편집]

add_lst = [1111,2222,3333,4444]
df9["c5"] = add_lst
 
print("-" * 100 + "{[10]}") # ----- #

1.2.8 컬럼 추가 : 빈 데이터프레임에 컬럼 추가(인덱스 포함)[편집]

df22 = DataFrame()
dd22 = df22.append({"c1":"", "c2":"", "c3":""}, ignore_index=True)
 
print df22

1.2.9 컬럼 추가 : 빈 데이터프레임에 컬럼 추가(인덱스 제외)[편집]

df33 = pd.DataFrame(columns=("c1", "c2", "c3")
print df33
 
print("-" * 100 + "{[10.3]}") # ----- #

1.2.10 컬럼 삭제[편집]

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]}") # ----- #

1.2.11 인덱스 컬럼명 변경[편집]

df2.index.name = "Count"
print df2.index
print df2

1.3 데이터프레임 개체 속성 조회 및 변경(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"])

1.3.1 컬럼 이름 리턴[편집]

print df2.columns.values

1.3.2 인덱스 이름 리턴[편집]

print df2.index

1.3.3 기타 속성 리턴[편집]

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]}") # ----- #

1.3.4 개체 타입 확인[편집]

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]}") # ----- #

1.4 데이터프레임 데이터 조회(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"])

1.4.1 원하는 컬럼만 출력[편집]

newColList = [0,1]
print df2[newColList]

1.4.2 데이터 추출 : 컬럼단위[편집]

print df2[["c1","c3"]]
print df2[["c2"]]         # 인덱스와 컬럼명까지 출력
print df2["c2"]           # 인덱스만 출력
 
print("-" * 100 + "{[13]}") # ----- #

1.4.3 데이터 추출 : 행단위[편집]

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]}") # ----- #

1.4.4 데이터 추출 : 부분[편집]

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]}") # ----- #

1.4.5 데이터 추출 : 아래 3개 동일[편집]

print df2[0:2]
print df2.ix[0:2]
print df2.ix[0:2, :]
 
print("-" * 100 + "{[16]}") # ----- #

1.4.6 데이터 추출 : 조건 처리[편집]

df2["c4"] = df2["c3"] > 300
print df2
 
print("-" * 100 + "{[17]}") # ----- #

1.5 데이터프레임 데이터 변경(update, delete, insert)[편집]

df2 = DataFrame({"c1":[1,2,3], "c2":[11,22,33], "c3":[111,222,333]}, index=["i1","i2","i3"])

1.5.1 컬럼값 전체 변경[편집]

df2["c3"] = df2["c1"] + df2["c2"]
print df2
 
df2["c3"] = 111
print df2
 
print("-" * 100 + "{[18]}") # ----- #

1.5.2 컬럼 추가 후 데이터 입력[편집]

df2["newC4"] = ["a","b","c"]
print df2

1.5.3 컬럼 데이터 수정[편집]

df2["newC4"] = [111,222,333]
print df2
 
df2.ix[1,2] = 2000
print df
 
print("-" * 100 + "{[19]}") # ----- #

1.5.4 행 추가[편집]

rows = [4, 44, 444, "d"]
df2.loc[len(df2)] = rows
print df2
 
df2 = df2.rename(index={3:"i4"})
print df2

1.5.5 행 추가 : 빈 데이터프레임에 행 추가(인덱스 포함)[편집]

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

1.5.6 행 추가 : 빈 데이터프레임에 행 추가(인덱스 제외)[편집]

df33 = pd.DataFrame(columns=("c1", "c2", "c3"))
 
df33.loc[0] = [ "111", "222", "333"]
 
print df33

1.5.7 행 삭제[편집]

df2 =  df2.drop("i2", axis = 0)
print df2
 
print("-" * 100 + "{[20]}") # ----- #

1.6 데이터프레임 출력 변환[편집]

print df2.T         # 피벗
print df2.values    # array로 받음
print df2.shape     # 행렬(Array) 형태 출력
 
print("-" * 100 + "{[21]}") # ----- #

1.7 인덱싱(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]}") # ----- #

1.7.1 중복 인덱싱[편집]

df = df.reindex(["i1", "i2", "i4", "i4", "i5"])
print df
 
print df.index.is_unique  # 인덱스가 unique이면 True 리턴
print df.ix["i4"]
 
print("-" * 100 + "{[24]}") # ----- #

1.7.2 인덱스 컬럼명 변경[편집]

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]}") # ----- #

1.7.3 기존 컬럼을 인덱스로 변경[편집]

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

1.8 정렬(sort_index, sort_values)[편집]

df = DataFrame({"c2":[10,40,70], "c3":[50,20,20], "c1":[60,30,90]}, index=["i2","i1","i3"])
print df

1.8.1 정렬 : 인덱스 기준[편집]

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]}") # ----- #

1.8.2 정렬 : 컬럼 기준[편집]

print df.sort_values(by = "c1")
print df.sort_values(by = "c1", ascending=False)
print df.sort_values(by = ["c3","c2"])
 
print("-" * 100 + "{[27]}") # ----- #

1.9 NULL 처리(NaN, NA, NULL)[편집]

from numpy import nan as NA
df = DataFrame(np.random.randn(7,3))
print df

1.9.1 강제로 NA 추가[편집]

df.ix[2,1] = NA
df.ix[3,2] = NA
print df

1.9.2 NaN 변경(null if)[편집]

df.replace(np.NaN, 'NULL Value', inplace=True)
#df.column_nm.replace(np.NaN, 'NULL Value', inplace=True)

print("-" * 100 + "{[28]}") # ----- #

1.10 랭킹 및 집계처리(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]}") # ----- #

1.10.1 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.11 Pandas Numpy 사용법[편집]

1.11.1 numpy : 배열 구조 및 연산[편집]

import numpy as np

1.11.2 난수를 통한 배열 생성[편집]

data = np.random.randn(2,3)
print(data)

print("-"*100) # ---------------------------

1.11.3 리스트를 통한 배열 생성[편집]

data1 = [6,7,5,8,0,1]
print(data1)

arr1 = np.array(data1)
print(arr1)

1.11.4 2차원 리스트를 통한 배열 생성[편집]

data2 = [[1,2,3,4],[5,6,7,8]]
arr2 = np.array(data2)
print(arr2)

print("-"*100) # ---------------------------

1.11.5 array 구조 출력[편집]

print(arr2.shape)

1.11.6 0으로 채워진 배열 생성[편집]

print(np.zeros((2,3)))

1.11.7 순번으로 채워진 배열 생성[편집]

print(np.arange(15))

print("-"*100) # ---------------------------

1.11.8 다차원 배열 생성 및 계산[편집]

arr = np.array([[1,2,3],[4,5,6]])
print(arr)
print(arr+arr)
print(arr*arr)

print("-"*100) # ---------------------------

1.11.9 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) # ---------------------------

1.11.10 불리언 색인(Boolean Index)[편집]

names = np.array(["Bob", "Joe", "Will", "Bob", "Will", "Joe", "Joe"])
data = np.random.randn(7,4)

print(names)
print(data)

1.11.11 조건에 맞는지 boolean 리턴[편집]

print(names == "Bob")

print("-"*100) # ---------------------------

1.11.12 두 배열을 조합한 조회[편집]

print(data[names=="Bob"])     # Bob이 있는 행
print(data[names=="Bob",0])   # Bob이 있는 행의 0번째 열

print("-"*100) # ---------------------------

1.11.13 배열의 OR 조건 Boolean 조회[편집]

mask = (names=="Bob") | (names=="Will")
print(mask)

1.11.14 조건에 따라 배열 값 변경 조회[편집]

data[data<0] = 0
print(data)

data[names!="Joe"] = 7
print(data)

print("-"*100) # ---------------------------

1.11.15 피벗팅 및 배열 재조합[편집]

-- 피벗팅
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

1.11.16 배열 조회 조건 및 집계[편집]

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.11.17 정렬 및 중복제거[편집]

arr = np.random.randn(5,3)
print(arr)

# -- 정렬
arr.sort(1)     # 행 단위로 정렬
print(arr)

# -- 중복제거
names = np.array(["Bob", "Joe", "Will", "Bob", "Will", "Joe", "Joe"])

print(np.unique(names))        # 중복제거
print(len(np.unique(names)))   # 중복제거 개수
print(set(names))              # 뭐지?
print(np.unique(names)[1])     # 또 뭐더라?

print("-"*100) # ---------------------------

1.11.18 선형대수(행렬 연산)[편집]

x = np.array([[1,2,3],[4,5,6]])
y = np.array([[6,3],[-1,7],[8,9]])
print(x)
print(y)

# -- 행렬 곱하기?
print(x.dot(y))  # print(x*y)는 에러발생

print("-"*100) # ---------------------------

-- ?
from numpy.linalg import inv, qr
x = np.random.randn(5,5)

mat = x.T.dot(x)

print(inv(mat))
print(mat.dot(inv(mat)))

1.11.19 난수 생성[편집]

samples = np.random.normal(size =(3,4))
print(samples)

samples = np.random.normal(size =(2,2))
print(samples)

data = np.random.randn(2,2)
print(data)

1.12 For 문을 사용한 List,Dictionary 출력[편집]

import pandas as pd

1.12.1 리스트의 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")

1.12.2 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")

1.12.3 사전의 key, value 출력[편집]

d = {"apple": 100, "orange": 200, "banana": 300}
for key, value in d.items():
    print(key, value)
 
print(";;; 사전 key, value 출력[items() 사용]", ";" * 100, "\n")

1.12.4 데이터프레임의 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.13 DataFrame DB INSERT (ORACLE)[편집]

import pandas as pd
import cx_Oracle

-- Excel 파일읽기  
df = pd.read_excel('D:\\MPAA\상장법인목록.xlsx', sheet_name='상장법인목록',usecols=[0, 1], dtype={0:str, 1:str})
-- 컬럼명 지정 
df1 = df[['종목코드', '회사명']]

-- 데이터프레임을 튜플로 변경  
rows = [tuple(x) for x in df1.to_records(index=False)]
 
-- 오라클 연결 
con = cx_Oracle.connect('STOCK', '1234', 'ORCL')
 
cursor = con.cursor()
 
cursor.execute('DELETE FROM ITEM_CODE')
cursor.executemany("INSERT INTO ITEM_CODE (ITEM_CD, ITEM_NM) VALUES (:1, :2)", rows)
con.commit()
 
cursor.execute('SELECT COUNT(*) FROM ITEM_CODE')
cnt = cursor.fetchone()
 
print('Insert 건수: ', cnt)

1.14 DataFrame DB INSERT (mssql)[편집]

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()