- Panel datas의 약어로 데이터를 조작/분석하기 위한 라이브러리
- 데이터를 통합하여 2차원 데이터로 분석할 수 있도록 가공하는 것
- 숫자만을 사용하는 헌퍼와 달리 문자, 숫자 등 다양한 데이터형을 가진 데이터를 한 번에 수정, 재배치, 연산할 수 있는 라이브러리.
- 시계열 데이터, 각종 필터링, 결측치/이상치 처리 기능
- matplotlib, seaborn 등 다양한 시각화 도구에서 사용
- 엑셀과 마찬가지로 빠르고 대용량의 데이터가 다를 수 있으며 스테로이드 맞춤 Excel이라고 불리는 강력한 도구
- 하단 C, 벡터화 연산, 구조(연속 메모리) => 고속
판다스의 특징과 장점
- 빠르고 효율적이며 다양한 표현력을 갖춘 데이터 구조
- 인덱스를 정수 이외에도 실수, 문자 등 다양한 데이터형을 설정 가능
- Excel에서 처리할 수 없는 대용량 데이터
- 다양한 종류의 데이터에 적합합니다.
이종자료형의 열을 가진 테이블데이터 시계열데이터 레이블을 가진 다양한 행렬데이터 다양한 관측 통계 데이터 인덱스를 정수 이외에 실수, 문자 등 다양한 데이터 유형으로 설정할 수 있다.
시리즈/DataFrame
시리즈
- 동일한 데이터 형식을 저장하는 인덱싱된 1차원 배열
- 사전과 마찬가지로 인덱스(index)와 값(value) 쌍
DataFrame
- Pandas의 2차원 데이터 구조
- 행과 열로 구성
- Excel 테이블 양식과 비슷합니다.
- 색인 및 열로 데이터 저장
구분 | Pandas | Numpy |
색인 자동 생성 | 사용자가 인덱싱 가능 | 숫자로 자동 생성 |
색인 유형 | 정수, 실수, 문자 등 다양한 데이터 유형 | 정수형 |
특징 | 색인을 다른 데이터 형식을 저장 데이터 변경, 삭제, 변환 가능 데이터 유형이 시리즈별로 다를 수 있습니다. |
인덱스를 정수형 데이터로 저장 자동 생성, 고속 배열 연산 데이터형이 수치형과 같은 사이즈와 형식을 가지는 |
DataFrame 만들기
DataFrame() 함수
- pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)
- data : DataFrame을 구성하는 데이터 – ndarray (structured or homogeneous), Iterable, Series or DataFrame
- index : 인덱스 값을 지정할 수 있습니다
- dtype: 각 항목에 적용되는 데이터 유형
- copy: DataFrame 또는 2차원 ndarray로 DataFrame을 만들 때 얕은 복사(link)를 할지 깊은 복사를 할지 결정합니다.
True or False
arr = np.array(((1,2,3),(4,5,6)))
pd.DataFrame(arr)
# index, columns 지정해서 생성, 기본은 0부터 일련번호로
pd.DataFrame(arr, index=('a', 'b'),columns=('가','나','다'))
iterable 객체 – 반복 가능 객체 만들기
- 대표적으로 iterable 형 – list, dict, set, str, bytes, tuple, range
df1 = pd.DataFrame((4,5,6,7), index=range(0,4),columns =('A'))
#딕셔너리의 key가 칼럼명으로 들어갑니다
dic = {'a':(1,3),'b':(1,2),'c':(2,4)}
pd.DataFrame(dic)
시리즈로 작성
#시리즈로 생성
s = pd.Series(('London','NewDelhi','Washington'), index=('UK','India','US'))
데이터 파일 처리
csv 파일 로드
df = pd.read_csv(filename)
df.info()
df.head(3)
#df.tail(3)은 뒤에서 3개를 뽑음
df.shape
>>> (11, 4)
df.columns
>>> Index(('이름', '국어', '영어', '수학'), dtype="object")
df.index.tolist() # 인덱스 리스트
>>> (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
df.values
>>> array((('kate', 100.0, 90, 95.0),
('olivia', 90.0, 80, 75.0),
('emma', 95.0, 100, 100.0),
('sophia', 100.0, 100, 100.0),
('amy', nan, 35, 60.0),
('james', 70.0, 75, 65.0),
('daniel', 80.0, 90, 55.0),
('peter', 50.0, 60, nan),
('kevin', 100.0, 100, 90.0),
('jack', 90.0, 95, 70.0),
('james', 70.0, 75, 65.0)), dtype=object)
대조
df.sort_values(by="국어", ascending=False) # 기본값은 True로 오름차순으로 되어있다.
데이터 추출
df.nlargest(5,'국어')
df.nsmallest(5,'국어')
|
- df.loc(“행 인덱스명”,”열 인덱스명” )
- df.iloc(행 인덱스, 열 인덱스)(0부터 시작하는 정수형 인덱스)
- df(“열 이름”) 또는 df.열 이름
df(('국어','수학'))
#행번호로 데이터추출
df.iloc(0)
>>>
이름 kate
국어 100.0
영어 90
수학 95.0
Name: 0, dtype: object
In ( ):
#마지막행번호로 데이터추출
df.iloc(-1)
>>>
이름 james
국어 70.0
영어 75
수학 65.0
Name: 10, dtype: object
#슬라이싱으로 여러 데이터 추출
df.iloc(1:3)
#행번호로 여러 데이터 추출
df.iloc((1,3,5))
#iloc( 행번호 , 열번호 )
df.iloc(0)(0)
>>> 'kate'
#특정열의 모든 행 추출
df.iloc(:,0)
>>>
0 kate
1 olivia
2 emma
3 sophia
4 amy
5 james
6 daniel
7 peter
8 kevin
9 jack
10 james
Name: 이름, dtype: object
#특정열들의 모든 행 추출
df.iloc(:,(0,3))
index와 loc
df.set_index('이름', inplace=True)
#인덱스로 추출
df.loc('kate')
>>>
국어 100.0
영어 90.0
수학 95.0
Name: kate, dtype: float64
#인덱스, 컬럼명으로 추출
#df.loc(인덱스, '컬럼명')
df.loc('kate','국어')
>>>
100.0
#여러 인덱스, 여러 컬럼명으로 추출
#df.loc((인덱스), ('컬럼명'))
df.loc(('kate','emma'),('국어','수학'))
데이터 통계 표시
df.sum()
>>>
국어 845.0
영어 900.0
수학 775.0
dtype: float64
df.mean()
>>>
국어 84.500000
영어 81.818182
수학 77.500000
dtype: float64
df.min()
>>>
국어 50.0
영어 35.0
수학 55.0
dtype: float64
df.max()
>>>
국어 100.0
영어 100.0
수학 100.0
dtype: float64
df.describe()
# 국어점수가 가장 높은 학생
df(df.국어 == max(df('국어')))(('국어','수학'))
결측치 처리
# copy를 통해 데이터프레임 원본을 유지
df1 = df.copy()
# 결측치 확인
df1.isnull().sum()
>>>
국어 1
영어 0
수학 1
dtype: int64
결측치 처리 방법에 의한 데이터 프레임 명령
#결측치 삭제
df1.dropna(inplace=True)
# inplace=True를 통해 데이터프레임내 값을 변경하겠다고 설정
# 결측치를 데이터프레임 평균값으로 대체
df1.fillna(df1.mean(), inplace=True)
추가 및 삭제
행 추가
df.loc('jia') = (100,100,100)
열 추가
df('총점')=df.sum(axis=1)
# axis = 0 은 행방향 1은 열방향
행삭제
df.drop(('jia'), inplace=True)
열 제거
df.drop(('총점','평균'),axis=1, inplace=True)