pandas 데이터 타입
Series: 1차원 리스트. 인덱스가 무조건 한 개.
DataFrame: 2차원 리스트. 인덱스가 행과 열 두 개를 갖음.
import numpy as np
import pandas as pd
a = pd.Series([1, 3, 5, np.nan, 6, 8])
print(type(a)) # Series
print(a) # Series에서 특정 인덱스의 아이템을 선택: Series(연산자).[index]
<class 'pandas.core.series.Series'>
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
# Series에서 특정 인덱스의 아이템 선택: Series[index]
print(a[0]) # a[0]의 데이터 타입: float64
# 인덱스 연산자([]) 안에서 범위 연산자(:)를 사용할 수도 있음
print(a[0:3]) # a[0:3]의 데이터 타입: Series
# 인덱스 연산자([]) 안에서 리스트 연산자([])을 사용할 수도 있음.
print(a[[0, 2, 4]]) # print(a[[0, 2, 4]]) 데이터 타입: Series
1.0
0 1.0
1 3.0
2 5.0
dtype: float64
0 1.0
2 5.0
4 6.0
dtype: float64
students = pd.DataFrame({
'no': [3, 13, 23],
'name':['김은광', '이영지', '조경희'],
'gender': ['M', 'F', 'F']
})
print(students)
no name gender
0 3 김은광 M
1 13 이영지 F
2 23 조경희 F
# 2차원 리스트([ [...], [...], [...] ]) 타입의 데이터에서 DataFrame을 생성
students = pd.DataFrame([
[4, '구재성', 'M'],
[14, '주재경', 'M'],
[24, '최지원', 'F']
], columns =['no', 'name', 'gender'])
print(students)
no name gender
0 4 구재성 M
1 14 주재경 M
2 24 최지원 F
# DataFrame.iloc[row_index, column_index]
print(students.iloc[0, 0]) # 0번 row, 0번 column의 아이템
print(students.iloc[0, 0:3]) # 0번 row, 0, 1, 2 column의 아이템
print(type(students.iloc[0, 0:3])) # Series
4 # 0번 row, 0번 column의 아이템
no 4
name 김재성
gender M
Name: 0, dtype: object
<class 'pandas.core.series.Series'>
print(students.iloc[0:2, 0:2])
print(type(students.iloc[0:2, 0:2]))
no name
0 4 김재성
1 14 이재경
<class 'pandas.core.frame.DataFrame'>
print(students.iloc[:, 1:3]) # 행은 생략 불가능
print(students.iloc[1:3, :])
print(students.iloc[1:3]) # 열은 생략 가능
name gender
0 김재성 M
1 이재경 M
2 조지원 F
no name gender
1 14 이재경 M
2 24 조지원 F
no name gender
1 14 이재경 M
2 24 조지원 F
# boolean indexing
>> Boolean 조건에 True인 행들만 뽑아서 결과값을 출력
print(students[[False, True, False]])
no name gender
1 14 이재경 M
condition = (students['gender'] == 'M')
print(condition)
0 True
1 True
2 False
Name: gender, dtype: bool
print(students[condition])
no name gender
0 4 김재성 M
1 14 이재경 M
students.columns = ['no', 'name', 'gender'] # column 이름 수정
# 데이터프레임 합치기, axis = 0 : cbind , axis = 1 : rbind
stu_df = pd.concat([df, students], axis = 0)
print(stu_df)
no name gender
0 3 김영광 M
1 13 이은지 F
2 23 조유경 F
0 4 김재성 M
1 14 이재경 M
2 24 조지원 F
print(stu_df.iloc[0])
print(stu_df.loc[0])
no 3
name 김영광
gender M
Name: 0, dtype: object
no name gender
0 3 김영광 M
0 4 김재성 M
stu_df2 = pd.concat([df, students], axis = 0, ignore_index= True)
# ignore_index = True
print(stu_df2)
no name gender
0 3 김영광 M
1 13 이은지 F
2 23 조유경 F
3 4 김재성 M
4 14 이재경 M
5 24 조지원 F
print(stu_df2.iloc[0])
print(stu_df2.loc[0])
no 3
name 김영광
gender M
Name: 0, dtype: object
no 3
name 김영광
gender M
Name: 0, dtype: object
# DataFrame.sort_values(정렬 기준 컬럼 이름)
print(stu_df2.sort_values('no'))
no name gender
0 3 김영광 M
3 4 김재성 M
1 13 이은지 F
4 14 이재경 M
2 23 조유경 F
5 24 조지원 F
# 두 개 이상의 조건으로 boolean indexing
cond1 = stu_df2['no'] % 2 == 1 # no 컬럼의 값이 홀수이면
cond2 = stu_df2['gender'] == 'F' # gender 컬럼의 값이 'F'이면
subset = stu_df2[cond1 & cond2] # and 를 사용하면 안된다
print(subset)
no name gender
1 13 이은지 F
2 23 조유경 F
# boolean 인덱싱에서는 and, or 연산자는 사용할 수 없고,
# 각 성분별로 연산을 하는 (bitwise 연산자)는 &, |를 사용해야 한다