카테고리 없음

Pandas DataFrame

동산로 2025. 4. 23. 14:01

dataframe은 pandas 라이브러리에서 제공하는 데이터 구조입니다. 테이블로 구성된 데이터를 다루는데 적합합니다. 사용하기 편하기 때문에 많이 사용됩니다.

2차원 테이블은 pandas.DataFrame이고 1차원 열은 pandas.Series를 사용합니다. 실질적으로 DataFrame은 같은 인덱스를 가지는 Series의 집합이라고 보면 됩니다.

데이터 접근

__getitem__ ( 혹은 [] )

하나의 열 이름을 입력하면 시리즈가 반환되고, 열 이름의 리스트를 입력하면 데이터 프레임이 반환됩니다.

# Series를 반환 
df['column_name']

# DataFrame을 반환
df[['col1','col2']]
>>> data['CRIM'].info()
<class 'pandas.core.series.Series'>
RangeIndex: 526 entries, 0 to 525
Series name: CRIM
Non-Null Count  Dtype  
--------------  -----  
506 non-null    float64
dtypes: float64(1)
memory usage: 4.2 KB
>>> data[['CRIM','NOX']].info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 526 entries, 0 to 525
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   CRIM    506 non-null    float64
 1   NOX     526 non-null    float64
dtypes: float64(2)
memory usage: 8.3 KB
loc vs iloc
# iloc : 일반적인 리스트의 인덱스 처럼 사용 가능합니다.
row = df.iloc[3]  # 4번째 줄
rows = df.iloc[1:4]

# loc : 라벨 이름
row = df.loc[3] # 3번 라벨이 붙은 아이템을 반환

소팅이 되고 나면 둘의 실행 결과가 많이 달라지기 때문에 주의해서 사용해야 합니다.

Boolean Filtering, true,false를 활용한 필터링

filtered =df[(df['col1'] >= 10 ) & (df['col2'] < 5) ]

비교 연산자들은 각각의 연산 결과에 맞춘 rows의 참 거짓으로 구성된 시리즈를 반환합니다. 그 시리즈에 맞는 데이터 프레임의 부분만 골라서 반환 가능합니다.

자주 사용하는 속성값

df.shape       # (rows, columns)
df.columns     # column names
df.index       # row index
df.dtypes      # data types of each column
df.values      # 2D array of values (not recommended for complex types)
df.ndim        # number of dimensions (should be 2)
df.size        # total number of elements

결측치 처리

df.isnull()
df.dropna()
df.fillna(value)
df.reset_index(drop=True, inplace=True)

합산, 통계

df.sum(), df.mean(), df.median(), df.std()
df.count(), df.nunique(), df.quantile([0.25,0.75])
df.kurt(), df.skew()

열 계산

df['new'] = df['a'] + df['b']
df['log_x'] = df['x'].apply(np.log)

데이터 조작

df.rename(columns={'old': 'new'})
df.set_index(['col','col2'])
df.drop(['unwanted_col'], axis=1)
df.astype({'col':str})
df.select_dtypes(include='number')

합치기, 그룹 만들기


pd.concat([df1,df2])
pd.merge(left,right, on='key')  #SQL과 유사
df.groupby('group_col').mean()  # 그룹을 만들고 나서 보통 통계 함수들을 사용합니다. 

카테고리 인코딩

pd.get_dummies(df, columns=['category_col']) # one-hot encoding

그 외 자주 사용하는 메소드

df.info()      
df.describe()  
df.head(n)     
df.tail(n)     
df.sort_values(by='col')
df.read_csv(), df.to_csv()