리스트에 비해 메모리 효율적
선형대수학 구현
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)
-> 이어붙이기