728x90
반응형
2. 데이터 기본 정보 알아보기
type(df)
pandas.core.frame.DataFrame
2-1. column(열)
df.columns
Index(['이름', '그룹', '소속사', '성별', '생년월일', '키', '혈액형', '브랜드평판지수'], dtype='object')
new_column = ['name','group','company','gender','birthday','height','blood','brand']
df.columns = new_column
df.columns
Index(['name', 'group', 'company', 'gender', 'birthday', 'height', 'blood',
'brand'],
dtype='object')
df
2-2. row(행)
df.index
RangeIndex(start=0, stop=15, step=1)
# 기본적인 행의 정보와 데이터타입을 확인
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15 entries, 0 to 14
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 15 non-null object
1 group 14 non-null object
2 company 15 non-null object
3 gender 15 non-null object
4 birthday 15 non-null object
5 height 13 non-null float64
6 blood 15 non-null object
7 brand 15 non-null int64
dtypes: float64(1), int64(1), object(6)
memory usage: 1.1+ KB
2-3. 통계정보 알아보기
# 통계 정보를 확인: 기본값은 정수 또는 실수 컬럼만 확인
df.describe()
df.describe(include='all') # df.describe(include='object')
2-4. 형태(shpae) 알아보기
df.shape
(15, 8)
2-5. 원하는 개수의 데이터 보기
- head(): 상위 5개의 row를 출력
- head(n): 상위 n개의 row를 출력
- tail(): 하위 5개의 row를 출력
- tail(n): 하위 5개의 row를 출력
df.head(3)
df.tail()
df.tail(3)
2-6. 정렬하기
# 기본값은 index로 오름차순
# index로 내림차순 정렬
df.sort_index(ascending=False)
# 이름순으로 오름차순 정렬
df.sort_values(by='name')
# 이름순으로 내림차순 정렬
df.sort_values(by='name', ascending=False)
# 키순으로 내림차순 정렬, NaN을 가장 위로 올림
df.sort_values(by='name', ascending=False, na_position='first')
# 키순으로 오름차순 정렬 후 브랜드로 오름차순 정렬, NaN을 가장 위로 올림
df.sort_values(by=['height', 'brand'], na_position='first')
# 키순으로 내림차순 정렬 후 브랜드로 오름차순 정렬, NaN을 가장 위로 올림
df.sort_values(by=['height', 'brand'], ascending=[False, True],na_position='first')
3. 컬럼으로 데이터 다루기
df.head()
df['name']
0 지민
1 지드래곤
2 강다니엘
3 뷔
4 화사
5 정국
6 민현
7 소연
8 진
9 하성운
10 태연
11 차은우
12 백호
13 JR
14 슈가
Name: name, dtype: object
df.name
0 지민
1 지드래곤
2 강다니엘
3 뷔
4 화사
5 정국
6 민현
7 소연
8 진
9 하성운
10 태연
11 차은우
12 백호
13 JR
14 슈가
Name: name, dtype: object
3-1. 컬럼 범위 선택하기
df[:3] # df.head(3)
df.loc[:, 'name']
0 지민
1 지드래곤
2 강다니엘
3 뷔
4 화사
5 정국
6 민현
7 소연
8 진
9 하성운
10 태연
11 차은우
12 백호
13 JR
14 슈가
Name: name, dtype: object
df.loc[:3, 'name'] # index 3을 포함
0 지민
1 지드래곤
2 강다니엘
3 뷔
Name: name, dtype: object
df.loc[:,['name', 'height']]
df.loc[3:8, ['name','height']]
df.loc[3:8, 'name':'height']
df.iloc[:,[0,2]]
df.iloc[:,0:2] # 0:2 -> index 2를 포함하지 않음
df.iloc[1:4,0:2]
df['height'] >= 180
0 False
1 False
2 True
3 False
4 False
5 False
6 True
7 False
8 False
9 False
10 False
11 True
12 False
13 False
14 False
Name: height, dtype: bool
df[df['height'] >= 180]['name']
2 강다니엘
6 민현
11 차은우
Name: name, dtype: object
df[df['height'] >= 180][['name','gender','height']]
df.loc[df['height'] >= 180, ['name','gender','height']]
3-3. isin 활용하기
- isin은 조건을 걸고자 하는 값이 정의한 list에 있을 때만 색인하려는 경우에 사용
company = ['플레디스', 'SM']
df['company'].isin(company)
0 False
1 False
2 False
3 False
4 False
5 False
6 True
7 False
8 False
9 False
10 True
11 False
12 True
13 True
14 False
Name: company, dtype: bool
df.loc[df['company'].isin(company), :] # df.loc[df['company].isin(company)]
df.loc[df['company'].isin(company), ['name', 'company']]
4. 결측값(NaN)
- NaN은 비어있는 값 또는 결측값이라고 부름
- pandas에서는 null을 NaN(Not a Number)으로 표기됨
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15 entries, 0 to 14
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 15 non-null object
1 group 14 non-null object
2 company 15 non-null object
3 gender 15 non-null object
4 birthday 15 non-null object
5 height 13 non-null float64
6 blood 15 non-null object
7 brand 15 non-null int64
dtypes: float64(1), int64(1), object(6)
memory usage: 1.1+ KB
# 결측값인지 아닌지 여부를 판단
df.isna()
# null인지 여부를 판단
df.isnull()
df['group'].isnull()
0 False
1 False
2 True
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 False
11 False
12 False
13 False
14 False
Name: group, dtype: bool
df[df['group'].isnull()]
df[df['group'].isnull()]['name']
2 강다니엘
Name: name, dtype: object
df['name'][df['group'].isnull()]
2 강다니엘
Name: name, dtype: object
df['name'][df['group'].notnull()]
0 지민
1 지드래곤
3 뷔
4 화사
5 정국
6 민현
7 소연
8 진
9 하성운
10 태연
11 차은우
12 백호
13 JR
14 슈가
Name: name, dtype: object
# 그룹이 있는 연예인의 이름, 키, 혈액형을 출력(단, loc을 사용)
df.loc[df['group'].notnull(), ['name','height','blood']]
new_df = df
new_df.head()
new_df['name'] = '김사과'
new_df.head()
df.head()
print(hex(id(new_df)))
print(hex(id(df)))
0x7fc0cf262490
0x7fc0cf262490
df = pd.read_csv('http://bit.ly/ds-korean-idol')
df
copy_df = df.copy()
print(hex(id(copy_df)))
print(hex(id(df)))
0x7fc0807163d0
0x7fc080716700
copy_df['이름'] = '김사과'
copy_df.head()
df.head()
6. row, column 추가 및 삭제하기
6-1. row 추가하기
- dict 형태의 데이터를 만들어주고 append() 함수를 사용하여 데이터를 추가
- 반드시 ignore_index=True 옵션을 추가해야 에러가 나지 않음
df.append({'이름':'김사과', '그룹':'애플', '소속사':'apple','성별':'여자', '생년월일':'2000-01-01', '키': 160, '혈액형':'A', '브랜드평판지수': 12345678}, ignore_index=True)
df = df.append({'이름':'김사과', '그룹':'애플', '소속사':'apple','성별':'여자', '생년월일':'2000-01-01', '키': 160, '혈액형':'A', '브랜드평판지수': 12345678}, ignore_index=True)
df.tail()
6-2. column 추가하기
df.head()
df['국적'] = '대한민국'
df.head()
df.loc[df['이름']=='김사과','국적'] = '미국'
df.tail()
7. 통계함수 다루기
df.describe()
df['키'].sum()
2445.3
df['키'].count() #NaN을 제외
14
df['키'].mean()
174.66428571428574
df['키'].max()
183.0
# 분산: 데이터가 평균으로부터 얼마나 떨어져 있는지 정도
# (데이터-평균)**2을 모두 합한 값/데이터의 개수
df['키'].var() # 분산
49.08708791208794
# 표준편차: 분산에 루트를 씌움
df['키'].std() # 표준편차
7.0062178036432705
import numpy as np
data = np.array([1, 3, 5, 7, 9])
np.sqrt(((1-5)**2 + (3-5)**2 + (5-5)**2 + (7-5)**2 + (9-5)**2) / 5)
2.8284271247461903
data.std()
2.8284271247461903
8. 그룹으로 묶기
- groupby는 데이터를 그룹으로 묶어 분석할 때 사용
df.head()
df.groupby('소속사')
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fc0805b2c70>
df.groupby('소속사').count()
df.groupby('소속사').mean()
df.groupby('소속사').sum()
# 혈액형별로 그룹을 맺고, 키의 평균값을 확인
df.groupby('혈액형')['키'].mean()
혈액형
A 171.114286
AB 176.500000
B 183.000000
O 177.875000
Name: 키, dtype: float64
# 혈액형별로 그룹을 맺고 또 성별로 그룹을 나눈 후 키의 평균값을 확인
df.groupby(['혈액형','성별'])['키'].mean()
혈액형 성별
A 남자 175.140
여자 161.050
AB 남자 176.500
B 남자 183.000
여자 NaN
O 남자 177.875
Name: 키, dtype: float64
9. 결측값 채우기
<bound method DataFrame.info of name group company gender birthday height blood brand
0 지민 방탄소년단 빅히트 남자 1995-10-13 173.6 A 10523260
1 지드래곤 빅뱅 YG 남자 1988-08-18 177.0 A 9916947
2 강다니엘 NaN 커넥트 남자 1996-12-10 180.0 A 8273745
3 뷔 방탄소년단 빅히트 남자 1995-12-30 178.0 AB 8073501
4 화사 마마무 RBW 여자 1995-07-23 162.1 A 7650928
5 정국 방탄소년단 빅히트 남자 1997-09-01 178.0 A 5208335
6 민현 뉴이스트 플레디스 남자 1995-08-09 182.3 O 4989792
7 소연 아이들 큐브 여자 1998-08-26 NaN B 4668615
8 진 방탄소년단 빅히트 남자 1992-12-04 179.2 O 4570308
9 하성운 핫샷 스타크루이엔티 남자 1994-03-22 167.1 A 4036489
10 태연 소녀시대 SM 여자 1989-03-09 NaN A 3918661
11 차은우 아스트로 판타지오 남자 1997-03-30 183.0 B 3506027
12 백호 뉴이스트 플레디스 남자 1995-07-21 175.0 AB 3301654
13 JR 뉴이스트 플레디스 남자 1995-06-08 176.0 O 3274137
14 슈가 방탄소년단 빅히트 남자 1993-03-09 174.0 O 2925442>
반응형
'Python > 데이터분석' 카테고리의 다른 글
Python 데이터분석 matplotlib (0) | 2023.02.19 |
---|---|
Python 데이터 분석 Data Preprecessing (0) | 2023.02.18 |
Pythone Pandas(판다스) 기본 (0) | 2023.02.17 |
Python 데이터분석 Numpy 2 (0) | 2023.02.16 |
Python 데이터 분석 Numpy (0) | 2023.02.16 |