리스트에 비해 메모리 효율적
선형대수학 구현
array creation
- ndarray = np.array([1,2,3,4], float) -> 리스트, dtype(한 종류만 가능, dynamic typing 불가)
.shape -> dimension(tuple), .ndim -> rank, .size -> number of items
.dtype -> data type
.nbyte.reshape(d) -> d의 모양으로 바꿔서 반환
.flatten() -> 1차원으로 바꿔서 반환[,] 형식의 인덱싱 지원, [][]도 된다(row, column)
slicing -> row, column 따로 가능, 리스트와 동일
np.arange(시작, 끝, 스텝) -> 숫자를 차례로 넣어준다. 주로 reshape과 같이 쓴다.
np.zeros(shape, dtype, order)/np.ones(shape, dtype, order)/np.empty(shape, dtype,order)->초기화 안됐다는 의미
something_like -> ones, zeros, empty + like, 같은 쉐입의 해당 array 리턴
np.identity(n, dtype) -> nxn identity matrix 생성, nxm의 경우엔 .eye(n, m, k=idx)
np.diag(matrix) -> 대각선만 뽑아줌
random sampling -> np.random.uniform(0,1,10), np.random.normal(0,1,10)...
operation functions
.sum(axis=), .mean(), .std()np.vstack((a,b))->vertical stack/np.hstack((a,b)) -> horizontal stacknp.concatenate((a,b), axis=)m1.dot(m2).T or `.transpose()'timeit -> jupyter에서 코드의 퍼포먼스를 체크하는 함수
속도: for loop < list comprehension < numpy
comparison
np.any(조건) / np.all(조건) -> 전체를 보고 하나의 boolean 값 도출np.logical_and(조건), np.logical_not(조건), np.logical_or(조건) -> element-wisenp.where() 조건이 맞는 곳~~np.where(a>0, 3, 2) -> 조건에 맞는 곳은 3으로 아닌 곳은 2로 만든 array 반환np.where(a>5) -> 조건에 맞는 원소의 인덱스 array 반환np.isnan(a), np.isfinite(a)np.argmax(a, axis=), np.argmin(a, axis=) -> array(axis) 내 최대/최소의 index 반환boolean index -> TF로 구성 된 array로 조작
condition = array < 3 # 원소 < 3 인 경우 T, 아닌 경우 F인 배열 리턴
array[condition] # < 3에 해당하는 원소만 뽑아줌
fancy index -> index로 구성 된 array로 조작
index = [0, 0, 1, 2] # 이 값이 인덱스가 되어 원소를 뽑아옴, array의 인덱스 범위를 벗어나면 에러
array[index]
array.take(index) # 위와 동일
loadtxt, savetxt
np.save("name", arr=) -> pickle
series -> dataframe에서 한 column vector, index<->values pair
- list, ndarray, dict 모두 series 변환 가능
Series(data, dtype=, name=)
list_data = [1,2,3,4,5]
list_name = ['a','b','c','d','e']
# list 또는 numpy array를 series로 변환
# index 이름을 list_name으로 지정
example_obj = Series(data=list_data, index=list_name, name="number")
df.astype(float) -> type 변환
항상 index에 있는 값을 기준으로 값을 추가(NaN) 또는 제외
dataframe -> series의 모음(각각 dtype 다를 수 있음), 기본 2차원
DataFrame(data=, index=, columns=[], dtype=, copy=)loc[:], iloc[:] -> index location(이름에 따라)/position(순서에 따라)df.debt = df.age > 40 # 새로운 데이터 할당하기df.T -> transposeoperations
Series끼리: s1.add(s2) -> 겹치는 index끼리 연산, 없는 값은 NaN(fill_value=n 을 추가하면 없는 값을 n으로 간주하고 연산)
Series, DataFrame: Series를 axis를 기준으로 row broadcasting 실행
.map(lambda x: x**2)
s1.map(s2) -> 같은 위치의 데이터를 s2로 전환, dict를 넣으면 해당 key에 해당하는 값을 value로 바꿔준다. 비슷하게 .replace()
.apply(lambda) -> map의 df 버젼, 내장함수 넣어도 가능
.describe() -> 통계, 요약
.unique() -> series에서 유일한 값들만 모아서 리스트
.sum/.sub/.mean/.min/.max/.count/.median/.var
.isnull() -> NaN인 개수 반환
.sort_values([], ascending=True) -> column list를 기준으로 정렬
.corr/.cov/.corrwith
groupby : split + apply + combine
df.groupby(기준 column)[적용되는 column].sum().unstack() -> groupby로 묶인 데이터를 matrix 형태로 전환.swaplever() -> index level 변환.sum(level=0) 이런식으로 level 지정 연산 가능df.groupby(기준 column)g_d.get_group(그룹명).agg(내장함수 또는 내장함수 리스트).transform(lambda).filter(lambda)merge & concat
pd.merge(df1, df2, on='') -> 특정 column을 기준으로 두 dataframe 합치기pd.merge(df1, df2, left_on='', right_on='') 이런 식으로 column 이름 달라도 합칠 수 있음pd.concat([df1, df2]) or d1.append(d2) -> 이어붙이기