-
10 minutes to pandas - 생성 & 조회/변경데이터 분석/Pandas 2022. 3. 19. 22:09
Object Creation
Series
One-dimensional ndarray with axis labels (including time series).
The object supports both integer- and label-based indexingDataFrame
Two-dimensional, size-mutable, potentially heterogeneous tabular data.
Data structure also contains labeled axes (rows and columns).
Can be thought of as a dict-like container for Series objects.
DataFrame 은 Column 단위로 Series 를 엮었다고 생각하면 된다!df = pd.DataFrame( { "A": 1.0, "B": pd.Timestamp("20130102"), "C": pd.Series(1, index=list(range(4)), dtype="float32"), "D": np.array([3] * 4, dtype="int32"), "E": pd.Categorical(["test", "train", "test", "train"]), "F": "foo", } ) ''' <class 'pandas.core.frame.DataFrame'> Int64Index: 4 entries, 0 to 3 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 A 4 non-null float64 1 B 4 non-null datetime64[ns] 2 C 4 non-null float32 3 D 4 non-null int32 4 E 4 non-null category 5 F 4 non-null object dtypes: category(1), datetime64[ns](1), float32(1), float64(1), int32(1), object(1) memory usage: 288.0+ bytes '''
DataFrame 의 3가지 구성요소
data
Dict can contain Series, arrays, constants, dataclass or list-like objects.
각 dtype 을 가진 Series 의 묶음이라고 생각하면 된다.index
총 4개의 행이 있다. 4 entries (0 to 3)
정렬 (Sorting) 또는 필터링 (Filtering) 을 해도 index 는 변하지 않는다.
Index 를 지정해주지 않으면 RangeIndex 이다.
컬럼에서 Index 를 명시적으로 지정해주었다면 해당 Index 유형을 따라간다.
위 예시에서는 컬럼 C 에서 Index 를 지정해주었기 때문에 pandas.core.indexes.numeric.Int64Index 이다.
index 도 이름을 가질 수 있다.columns
총 6개의 컬럼이 있다. 각 컬럼은 dtype 을 가진다.column 도 axis=1 인 Index 이다.
Index 를 지정해주지 않으면 RangeIndex 이다.
하지만 A~F 로 지정해주었기 때문에, pandas.core.indexes.base.Index 이다.
Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object') 이다.Selection
주의. df['A'] 는 view 를 반환하고, df.loc['A'] 는 copy 를 반환
view 를 반환한 결과를 바꾸는 경우에는 원본 자체도 변경이 일어날 수 있음.
copy 를 반환한 결과를 바꾸는 경우에는 원본에는 변경이 없음.
>> 값을 단순 조회할 때에는 상관없음.
>> 단, 값을 변경할 때에는 indexer 를 사용하는 것을 권장!!Getting / Setting
Scalar 또는 Array 는 열로, Slicing 은 행으로 간주한다.# 특정 열의 모든 행에 대한 values 구하기 (scalar/array by label name) df.col1 df['col1'] df[['col1', 'col2']] # 특정 행의 모든 열에 대한 values 구하기 (slicing, by position) df[:] df[0:2] df[2:] df[:2] # 특정 행, 특정 열의 모든 values 구하기 df[:]['col1'] df['col1'][:] df[0:2]['col1'] df['col1'][0:2] df[0:2][['col1', 'col2']] df[['col1', 'col2']][0:2]
Selection By Label / Position
loc 은 label name 기반이고, iloc 은 position 기반이다.
loc, iloc 을 활용하면 행과 열 모두 scalar(숫자), 슬라이싱(:) , 배열([]) 그리고 필터링 접근이 모두 가능하다.#loc (select by lable name) df.loc[0, 'col1'] df.loc[0, ['col1', 'col2']] df.loc[0, 'col1':'col2'] df.loc[0:2, 'col1'] df.loc[[0,1,2], 'col1'] df.loc[df['col1']>0, 'col1'] #iloc (select by position, slicing include/exclude) df.iloc[0, 0] df.iloc[0, [0,1]] df.iloc[0, 0:2] df.iloc[[0,1], 0] df.iloc[0:2, 0 df.iloc[df['col1']>0, 0]
단, loc 의 슬라이싱은 포함/포함이며, iloc (포지션)에 대한 슬라이싱은 포함/제외 이다.
df = pd.DataFrame( { 'A': [1,2,3], 'B': [4,5,6], 'C': [7,8,9] } ) df.loc[0:1, 'B':'C'] ''' B C 0 4 7 1 5 8 ''' df.iloc[0:1, 1:2] ''' B 0 4 '''
Boolean Indexing
조건을 만족하는 대상을 가져온다.
일반적으로 하나의 열에 대한 값이 특정 조건을 만족할 때, (> 비교연산, isin 포함여부 연산) 해당 행 전체를 가져온다.Tip. & (AND) 와 | (OR) 와 같은 논리연산할 때에는 조건을 꼭 () 로 묶어주자.
df = pd.DataFrame({ 'A': [-1, 0, 1], 'B': [-2, 1, 2], 'C': [-3, 0, 3] }) ''' A B C 0 -1 -2 -3 1 0 1 0 2 1 2 3 ''' # Using a single column's values to select data df[df['A']>0] ''' A B C 2 1 2 3 ''' # Using the isin() method for filtering df[df['A'].isin([0, 1])] ''' A B C 1 0 1 0 2 1 2 3 ''' # Using more than 2 conditions for filtering (Intersection) df[(df['A'].isin([0,1]))&(df['B']==1)] ''' A B C 1 0 1 0 ''' # Using more than 2 conditions for filtering (Union) df[(df['A']==0)|(df['A']==1)] ''' A B C 1 0 1 0 2 1 2 3 '''
특정 열에 대한 값을 지정해주지 않으면 전체 열에 적용한다.
# Selecting values from a DataFrame where a boolean condition is met df[df>0] ''' A B C 0 NaN NaN NaN 1 NaN 1.0 NaN 2 1.0 2.0 3.0 '''
'데이터 분석 > Pandas' 카테고리의 다른 글
10 minutes to pandas - Merge & Join (0) 2022.03.27 10 minutes to pandas - 결측치 처리 (0) 2022.03.20 Pandas 데이터 먼징 실습 2 - 날짜/시간 가공 (2) 2020.08.27 Pandas 데이터 먼징 실습 1 - Null/Outlier 처리 및 데이터타입 변환 (0) 2020.08.24 Pandas 병합과 조인 연산 (파이썬 데이터 사이언스 핸드북 예시) (0) 2020.08.20