728x90
판다스
데이터 구조인 시리즈(Series), 데이터프레임(DataFrame) 제공
시리즈
1차원 배열 형태의 데이터 구조, 각 데이터에 인덱스가 부여되며 숫자, 문자열, 불리언 등 다양한 데이터 타입 저장가능
import pandas as pd
# 시리즈 생성
data = pd.Series([10, 20, 30, 40], index=['가', '나', '다', '라'])
# 데이터와 인덱스가 서로 매핑되기 때문에 길이가 일치해야함
print(data)
# 인덱스를 사용한 접근
print(data['나']) # 20
데이터프레임
2차원 배열 형태의 데이터 구조, 행과 열로 구성
각 열은 서로 다른 데이터 타입을 가질 수 있으며, 데이터베이스 테이블과 유사
딕셔너리 형태
각 키는 데이터프레임의 열 이름
각 키에 해당하는 값은 또 다른 딕셔너리로 이 딕셔너리의 키는 인덱스가 되고, 값은 해당 인덱스의 데이터가 된다.
df = pd.DataFrame({
'키1': {
'인덱스0': '값1',
'인덱스1': '값2'
},
'키2': {
'인덱스0': '값3',
'인덱스1': '값4'
}
})
# 데이터프레임 생성
df = pd.DataFrame({
'이름': {
'0': '한빛',
'1': '한결'
},
'성별': {
'0': '남자',
'1': '남자'
}
})
print(df)
# 딕셔너리는 기본적으로 열(column) 중심으로 사용
리스트 형태
list1 = list([['한빛', '남자'] ,['한결', '남자']])
col_names = ['이름', '성별']
pd.DataFrame(list1, columns=col_names)
# 이름 성별
# 0 한빛 남자
# 1 한결 남자
# 리스트는 기본적으로 행(row)중심으로 사용
배열 형태
#배열
arr1 = np.array([['한빛','남자'], ['한결','여자']])
#열 이름 리스트
col_names = ['이름', '성별']
#데이터프레임 생성하기
pd.DataFrame(arr1, columns=col_names)
#넘파이의 행렬은 기본적으로 행(row) 중심으로 사용)
데이터 조회, iloc 함수
loc 함수를 사용하여 인덱스로 데이터를 조회할 수 있음.
# 딕셔너리로 열단위의 데이터프레임 생성
data = { '이름': ['한빛', '한결'], '성별': ['남자', '여자'], '나이': [25, 24] }
df = pd.DataFrame(data)
print(df.iloc[1:2, 0:])
# 이름 성별 나이
# 1 한결 여자 24
문자열 조회
import pandas as pd
# 예시 데이터프레임
data = { '이름': ['한빛', '한결'], '성별': ['남자', '여자'], '나이': [25, 24]}
df = pd.DataFrame(data)
# '이름'이 '한빛'인 행 출력
print(df[df['이름'] == '한빛'])
df['이름']은 데이터프레임의 '이름' 열을 선택하여 시리즈를 생성
0 한빛
1 한결
Name: 이름, dtype: object
시리즈의 각 요소에 대해 '한빛'과 비교 후 불리언 배열을 생성
0 True
1 False
Name: 이름, dtype: bool
데이터프레임 df의 각 행에 대해 불리언 배열의 값이 True인 경우에만 그 행을 선택함
조건 조회
list1 = [
['자기이름', '남자', 30, 183],
['이가원', '여자', 24, 162],
['배규민', '남자', 23, 179],
['고고림', '남자', 21, 182]
]
col_names = ['이름', '성별', '나이', '키']
df = pd.DataFrame(list1, columns=col_names)
print(df[df['키'] > 182]) #=> 키가 182이상인 행을 조회하여 출력.
print(df[df['이름'].str.contains('고')]) #=> 이름에 ‘고’가 들어간 행을 조회하여 출력.
키를 비교하는 코드도 위와 비슷한 방식으로 동작
0 183
1 162
2 179
3 182
Name: 키, dtype: int64
0 True
1 False
2 False
3 False
Name: 키, dtype: bool
데이터 수정, loc 함수
dataframe.loc[행 인덱스, 열 이름] = 새로운 값
df.loc[3,'키'] = df.loc[3,'키'] + 5 #3행의 키열의 값을 5을 증가
print(df.loc[[3]] ) #대괄호 [[3]]를 사용하여 리스트 형태로 인덱스를 지정하면 해당 행이 데이터프레임 형태로 출력
iloc와 loc의 데이터 추출 비교
iloc
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
# 첫 번째 행, 두 번째 열에 있는 값을 가져오기
print(df.iloc[0, 1]) # 결과: 4
loc
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8,
9]}
df = pd.DataFrame(data)
# 인덱스와 컬럼 레이블로 접근
print(df.loc[0, 'B']) # 결과: 4
iloc와 loc의 슬라이싱 차이점
iloc 슬라이싱은 마지막 인덱스를 포함하지 않음
loc 슬라이싱은 마지막 인덱스를 포함
'데이터분석' 카테고리의 다른 글
이상치 (1) | 2024.11.27 |
---|---|
결측치 (0) | 2024.11.26 |
파이썬 맷플롯립(Matplotlib) (0) | 2024.10.20 |
파이썬 넘파이(NumPy) (0) | 2024.10.14 |
웹 크롤링 (0) | 2024.09.23 |