반응형
pandas에는 두 가지 데이터 타입이 있다
- Series : 1차원 자료구조.
- DataFrame : 2차원 자료구조.
pandas는 내부적으로 numpy array를 이용하고 있으므로 ndarray와 같이
같은 타입의 데이터만 저장이 가능하다.
pandas 데이터 타입은 숫자 인덱스 외에 별도로 문자 인덱스(지정인덱스)를 사용할 수 있다는 특징도 있다.
설치
conda install pandas
1. Series
# ndarray
ndarr = np.array([1,2,3,4,5], dtype=np.float64)
print("ndarr : \n", ndarr)
# series
s = pd.Series([1,2,3,4,5], dtype=np.float64)
print("\n1. Series :\n", s) # index와 value가 같이 출력된다.
print("\n2. s.values :\n", s.values) # 인덱스를 제외한 값만 출력, ndarray
print("\n3. s.index :\n", s.index) # pandas의 객체 RangeIndex 출력
print("\n4. s.dtype :\n", s.dtype)
출력 결과
ndarr :
[1. 2. 3. 4. 5.]
1. Series :
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
dtype: float64
2. s.values :
[1. 2. 3. 4. 5.]
3. s.index :
RangeIndex(start=0, stop=5, step=1)
4. s.dtype :
float64
지정 인덱스 사용하기
s = pd.Series([1, 2, 3, 4, 5],
dtype=np.float64,
index=['one', 'two', 'three', 'four', 'five'])
print(s)
출력 결과
one 1.0
two 2.0
three 3.0
four 4.0
five 5.0
dtype: float64
지정인덱스를 문자열로 사용했을때는 숫자 인덱스(기존의 인덱스)는 그대로 사용이 가능하지만,
숫자로 지정했을때는 기존의 숫자 인덱스는 사용이 불가능하다.
지정인덱스에 같은 문자열을 지정하는 것도 가능하다.
숫자 인덱스와 지정 인덱스는 슬라이싱을 할 때 차이를 보인다.
숫자 인덱스로 슬라이싱을 할 때는 마지막 인덱스를 포함하지 않지만
지정 인덱스를 사용해 슬라이싱을 하면 마지막 인덱스까지 포함하여 결과를 반환한다.
print("1.\n", s[0:3])
print("\n2.\n", s['one':'three'])
출력 결과
1.
one 1.0
two 2.0
three 3.0
dtype: float64
2.
one 1.0
two 2.0
three 3.0
dtype: float64
boolean indexing과 fancy indexing 역시 가능하다.
s = pd.Series([1, 2, 3, 4, 5],
dtype=np.float64,
index=['one', 'two', 'three', 'four', 'five'])
# boolean indexing
print(s[s%2==0])
# fancy indexing
print(s[[0,2]])
출력결과
two 2.0
four 4.0
dtype: float64
one 1.0
three 3.0
dtype: float64
딕셔너리를 이용해서 시리즈를 생성할 수도 있다.
딕셔너리의 key가 지정 인덱스가 된다.
my_dict = {'서울': 1000,
'인천': 500,
'제주': 200}
s = pd.Series(my_dict)
display(s)
2. DataFrame
idols = {
'그룹' : ['마마무', '에이핑크', '투피엠', '비투비'],
'멤버수' : [4, 6, 6, 6],
'데뷔년도' : ['2014', '2011', '2008', '2012']
}
df = pd.DataFrame(idols)
display(df)
print(df.shape)
print(df.values)
print(df.size)
print(df.ndim)
print(df.index) # 행 인덱스
print(df.columns) # 열 인덱스
print(df.columns[1])
[['마마무' 4 '2014']
['에이핑크' 6 '2011']
['투피엠' 6 '2008']
['비투비' 6 '2012']]
12
2
RangeIndex(start=0, stop=4, step=1)
Index(['그룹', '멤버수', '데뷔년도'], dtype='object')
멤버수
인덱스, 컬럼 이름 설정하기
df.index.name = '순서'
df.columns.name = '아이돌 정보'
df
DataFrame의 columns명과 index명 변경
-> rename()
inplace 옵션이 True이면 원본을 수정하고 복사본을 만들지 않는다.
inplace 옵션이 False면 원본은 그냥 두고 복사본을 만든다. False가 default
new_df = df.rename(columns={
'그룹' : '그룹명'
}, index={
0 : 1,
1 : 2,
2 : 3,
3 :4
}, inplace=False)
display(new_df)
display(df)
특정 컬럼을 인덱스로 지정하기
-> set_index()
idols = {
'그룹' : ['마마무', '에이핑크', '투피엠', '비투비'],
'멤버수' : [4, 6, 6, 6],
'데뷔년도' : ['2014', '2011', '2008', '2012'],
'소속사' : ['rbw', 'ist', 'jyp', 'cube']
}
df = pd.DataFrame(idols)
display(df)
df.set_index('그룹', inplace=True)
display(df)
DataFrame을 만들때 columns속성으로 column이 나타날 순서를 지정할 수 있고,
index 속성으로 지정인덱스를 지정할 수 있다.
idols = {
'그룹' : ['마마무', '에이핑크', '투피엠', '비투비'],
'멤버수' : [4, 6, 6, 6],
'데뷔년도' : ['2014', '2011', '2008', '2012'],
'소속사' : ['rbw', 'ist', 'jyp', 'cube']
}
df = pd.DataFrame(idols,
columns=['소속사', '데뷔년도', '그룹', '멤버수'],
index=['1', '2', '3', '4'])
display(df)
반응형
'Programming > Pandas' 카테고리의 다른 글
[pandas] read_csv 'utf-8' error (1) | 2022.03.21 |
---|---|
[Pandas] Movie Lens Data를 이용한 EDA 실습 (1) | 2022.03.21 |
[pandas] DataFrame Merge, Mapping, Grouping (0) | 2022.03.21 |
[pandas] DataFrame Indexing & Slicing (0) | 2022.03.17 |
[pandas] 여러가지 resource를 이용하여 DataFrame 생성하기 (csv, sql, api, json) (0) | 2022.03.17 |