일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 기계학습
- lstm
- AI
- pandas
- 그래프시각화
- 딥러닝
- 데이터
- 데이터시각화
- 데이터처리
- SQL
- R그래프
- 그래프
- R시각화
- word2vec
- CNN
- Hadoop
- 빅데이터처리
- 머신러닝
- Python
- 데이터분석
- 빅데이터
- 주가예측
- HIVE
- r
- 자연어처리
- NLP
- Deeplearning
- 하둡
- R프로그래밍
- ggplot
- Today
- Total
욱이의 냉철한 공부
[Python] pandas 사용하기 본문
Series
1. pandas, numpy 라이브러리 추출하기.
import pandas as pd
import numpy as np
2. series 만들기, 속성
obj = pd.Series([4,7,-5,3])
obj.values : 시리즈의 값만을 array로 표현
obj.index : 인덱스 값만을 표현
obj.dtypes : int라는 것을 확인
-원하는 인덱스 대입할 수 있다.
obj2 = pd.Series([4,7,-5,3],index=["d","b","a","c"])
- 딕션어리 형태로도 만들 수 있다.
sdata = {"charles" : 35000, "kilho" : 71000, "hayoung" : 16000, "sangjae":5000}
obj3 = pd.Series(sdata)
- 시리즈 자체와 시리즈 인덱스 자체에만 이름 지정 가능
obj3.name = "Salary"
obj3.index.name = "names"
obj3
- 인덱스 값 변경
obj3.index = ["A","B","C","D"]
3. 인덱싱
obj2['a']
obj2['d']
obj2[['c','a','d']]
obj[[1, 3]]
-
obj2[obj2>0]
obj['b':'c']
obj['b':'c'] = 5
obj2 * 2
np.exp(obj2)
'b' in obj2
'e' in obj2
4. null 확인
sdata = {'ohio':35000,'texas':71000,'oregon':16000,'utah':5000}
states = ['clifornia','ohio','oregon','texas']
obj4 = Series(sdata,index=states]
pd.isnull(obj4), obj4.isnull()
pd.notnull(obj4)
dataframe
1. dataframe 의미
시리즈의 집합이다. 각 칼럼은 서로 다른 종류의 값(숫자, 문자열, 불리언)을 담을 수 있다.
=> 인덱스 유무가 array와 리스트와 핵심적인 차이
2. dataframe 생성 및 기본.
data = {"names" : ["kilho","kilho","kilho","charles","charles","charles"] , "year" : [2014,2015,2016,2015,2016],"points" : [1.5,1.7,3.6,2.4,2.9]}
df = pd.DataFrame(data)
df.index : 행
df.columns : 열
df.values : 2차원 array 값으로 표현
df.index.name = "Num"
df.columns.name = "Info"
=>
columns는 정확하게 columnsindex이지만, columns라고 부른다.
index는 정확하게 rowindex지만, index라고 부른다.
df2 = pd.DataFrame(data, columns = ["year","name","points","penalty"], index=["one","two","three","four","five"])
df2.index
df2.columns
df2.values
df2.describe() : 계산 가능한 값들을 자동으로 계산해서 표현
df.rename(columns={df.columns[0] : "year"},inplace=True) : 열의 이름을 변경한다.
df.set_index("year",inplace=True) : year열을 인덱스로 사용한다.
3. 열 호출
data = {"names" : ["kilho","kilho","kilho","charles","charles"], "year":[2014,2015,2016,2015,2016], "points":[1.5,1.7,3.6,2.4,2.9]}
df = pd.DataFrame(data,colums=["year","names","points","penalty"],index=["one","two","three","four","five"])
- 1개 열 가져오기
df["year"] : year에 해당하는 값 표현 , index 이름과 함께 표현, 시리즈와 똑같다.
df.year
-복수 개의 열 가져오기
df[["year","points"]] : 중괄호를 두번 쓴다.
- 열 생성
df["penalty"] = 0.5
df["penalty"] = [0.1 ,0.2,0.3,0.4,0.5]
df[df < 5] = 0 : 전체
df["zeros"] = np.arange(5)
val = pd.Series([-1.2,-1.5,-1.7), index=["two","four","five"])
df["debt"]=val
df["new_points"] = df["points"] - df["penalty"]
df["high_points"] = df["net_points"]>2.0
- 열 삭제
del df["high_points"]
del df["net_points"]
del df["zeros"]
df
- 확인
df.columns : 보고 확인한다.
df.index.name = "order"
df.columns.name = "Info"
4. 행을 선택하고 조작하는 방법 : 인덱싱 및 슬라이싱
=>행을 인덱싱하는 방법 무수히 많다 .
df[0:3]
df["two":"four"]
=> 열하고 헷갈린다. 그래서 비추한다.
- loc사용 : loc : label에 대한 슬레이싱은 마지막 설정값도 범주에 포함시킨다.
df.loc["two"] : 인덱스가 two인 값의 행의 모든 값을 모두 가져온다.
df.loc["two":"four"]
df.loc["two":"four","points"]
df.loc[:,"year"]
df.loc[:,["year","names"]]
df.loc["three":"five","year":"penalty"]
df.loc["six",:] = [2013,"Hayoung",4.0,0.1,2.1]
- iloc 사용 : 값이 location이기 때문에 마지막 설정값을 포함하지 않는다.
df.iloc[3]
df.iloc[3:5,0:2] : 5하고 2에 해당하는 값 포함시키지 않는다. 이 숫자는 label이 아닌 location 값
df.iloc[[0,1,2],[1,2]]
df.iloc[:,1:4]
df.iloc[1,1]
- ix 사용 : 문자와 숫자 전부 활용.
data = DataFrame(np.arange(16).reshape((4, 4)), index=['Ohio', 'Colorado', 'Utah', 'New York'], columns=['one', 'two', 'three', 'four'])
data.ix['Colorado', ['two', 'three']]
data.ix[['Colorado', 'Utah'], [3, 0, 1]]
data.ix[2]
data.ix[data.three > 5, :3]
- 불리언 인덱싱 - 마스크
df["year"] > 2014
df.loc[df["year"]>2014,;]
df.loc[df["names"] == "kilho",["names","points"]]
df.loc[(df["points"]>2) &(df["points"]<3),:]
df.loc[ df["points"]>3, "penalty" ] = 0
- 3가지 비교
data.ix[['Colorado','Utah'],[3,0,1]]
data.loc['Colorado':'Utah',['four','one','two']]
data.iloc[1:3,[3,0,1]]
data.ix[data.three>5,:3]
data[data.three>5].iloc[:,:3]
data[data.three>5].loc[:,'one':'three']
5. reindexing
1. 0을 채운다.
obj = Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=0)
2. 앞의 값을 채운다.
obj3 = Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])
obj3.reindex(range(6), method='ffill')
3. row 재색인
frame = DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'], columns=['Ohio', 'Texas', 'California'])
frame2 = frame.reindex(['a', 'b', 'c', 'd'])
4. columns 사용
states = ['Texas', 'Utah', 'California']
frame.reindex(columns=states)
6. 결측치값 및 이상치 조정
df = pd.DataFrame(np.random.randn(6,4))
df.coloumns = ["A","B","C","D"]
df.index = pd.data_range("20160701",periods=6) : 데이터타임 형태 인덱스 중요 , 시계열에 사용 가능
df["F"] = [1.0,np.nan,3.5,6.1,np.nan,7.0] : F열 새롭게 정의,np.nan 인위적으로 포함 시키도록 할때
df.dropna(how="any") : nan가 포함된 행 제거
df.dropna(how="all") : 한 행의 모든 값이 nan일 경우 삭제
df.fillna(value = 5.0) : nan 대신 5.0 대입
df.isnull()
df.loc[df.isnull()["F"],:]
- 특정 행, 열 삭제
Series
obj = Series(np.arange(5.), index=['a', 'b', 'c', 'd', 'e'])
obj.drop('c')
obj.drop(['d', 'c'])
data = DataFrame(np.arange(16).reshape((4, 4)), index=['Ohio', 'Colorado', 'Utah', 'New York'], columns=['one', 'two', 'three', 'four'])
data.drop(['Colorado', 'Ohio'])
data.drop('two', axis=1) : 열 삭제, del로도 가능
data.drop(['two', 'four'], axis=1)
*다른 예
df.drop([26],inplace = True) : 26번행 제거
del df["열 이름"] : 열 이름 제거
7. 기술통계(통계함수, 분석함수)사용
data = [[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]]
df = pd.DataFrame(data,columns=["one","two"],index=["a","b","c","d"])
- 행, 열 계산
df.sum(axis=0) : 행방향 합을 구한다, 각 열의 합 산출
df.sum(axis=1) : 열방향 합을 구한다. 각 행의 합 산출
=> nan 배제하고 계산한다.
- 특정 열, 특정 열만 계산
df["one"].sum() : one이라는 열만 계산
df.loc["b"].sum() : b라는 행만 계산
- nan 감안해서 계산
df.mean(axis=1,skipna=False)
- NaN에 그 열의 평균값, NaN 그 열의 최소값 넣는다.
one_mean = df.mean(axis=0)["one"]
two_min = df.min(axis=0)["two"]
df["one"] = df["one"].fillna
df["one"] = df["one"].fillna(value=one_mean) : 전체로 사용하지 않을 것
df["two"] = df["two"].fillna(value=two_mean)
- 상관계수, 공분산
df2 = pd.DataFrame(np.random.rand(6.4), columns ["A","B","C","D"],index=pd.data_range("20160701",periods=6))
df2["A"],corr(df2["B"])
df2["B"].cov(df2["C"])
df2.corr() : 모든 열에 관해서 알아서 계산
df2.cov()
8. 정렬함수
인덱스 기준
dates=df2.index
random_dates = np.random.permutation(dates)
df2 = df2.reindex(index=random_dates,columns=["D","B","C","A"])
- 인덱스 오름차순
df2.sort_index(axis=0) : 인덱스 기준, 행방향
df2.sort_index(axis=1) : 칼럼기준, 열방향
- 인덱스 내림차순
df2.sort_index(axis=0,ascending = False)
df2.sort_index(axis=1,ascending = True)
- 값 기준
df2.sort_values(by="D")
df2.sort_values(by="B")
- 동시에 값 기준
df2["E"] = np.random.randint(0,6,size=6)
df2["F"] = ["alpha","beta","gamma","gamma","alpha","gamma"]
df2.sort_values(by=("E","F"])
9. 순위함수
obj = Series([7, -5, 7, 4, 2, 0, 4])
obj.rank()
obj.rank(method='first')
obj.rank(ascending=False, method='max')
frame = DataFrame({'b': [4.3, 7, -3, 2], 'a': [0, 1, 0, 1], 'c': [-2, 5, 8, -2.5]})
frame.rank(axis=1)
10. 유일 값, 값 세기,포함 여부
df2["F"].unique() : 유일값
df2["F"].value_counts() : 값 세기
df2["F"].isin(["alpha","beta"]) : 포함 여부
df2.loc[df2["F].isin(["alpha","beta"]),:] : 포함 여부 응용
11. 사용자가 직접 정의한 함수 적용
df3 = pd.DataFrame(np.random.randn(4,3),columns=["b","d","e"],index=["Seoul","Incheon","Busan","Daegu"])
func = lambda x: x.max() - x.min()
df3.apply(func, axis=0) : 각 열의 최대에서 최소 값 뺀 값 도출
df3.apply(func, axis=1) : 각 행의 최대에서 최소 값 뺀 값 도출
12. 누락된 데이터 처리
=> NA처리 메서드 - dropna, fillna, isnull, notnull
1. isnull
string_data = Series(['aardvark', 'artichoke', np.nan, 'avocado'])
string_data.isnull()
string_data[0] = None
2. dropna - how, axis 인자
from numpy import nan as NA
data = Series([1, NA, 3.5, NA, 7])
data.dropna()
data[data.notnull()]
data.dropna(how='all')
data.dropna(axis=1, how='all')
3. dropna - thresh 인자
df = DataFrame(np.random.randn(7, 3))
df.ix[:4, 1] = NA; df.ix[:2, 2] = NA
df.dropna(thresh=3) : 몇 개 이상의 값이 들어있는 로우만 살펴보기.
4. fillna
인자 : value, method, axis, inplace, limit
df.fillna(0) : 비어 있는 곳에 0 대입
df.fillna({1:0.5,3:-1}) : 사전 값을 넘겨서 각 칼럼마다 다른 값 대입
df.fillna(method='ffill') : 열의 끝 자리 값을 그대로 대입
df.fillna(method='ffill', limit=2) : 열의 끝 자리 값을 2개 까지만 대입
data = Series([1., NA, 3.5, NA, 7])
data.fillna(data.mean()) : 비어 있는 곳에 평균 값 대입
'데이터분석 > Python : Basic' 카테고리의 다른 글
[Python, 정리] Pandas - 데이터 그룹연산 (0) | 2022.03.28 |
---|---|
[Python, 정리] Pandas - 데이터 처리 (0) | 2022.03.28 |
[Python, 정리] Numpy 사용하기 (0) | 2022.03.28 |
[Python, 정리] 데이터 타입 이해하기 (0) | 2022.03.28 |