pandas¶
- Panel Data: 금융데이터 계량 분석
- Python Data Analysis Library
- https://pandas.pydata.org
In [1]:
import warnings
warnings.filterwarnings('ignore')
File Upload to Colab¶
- Colab 가상환경에 파일 올리기
- Colab 종료 시 파일은 삭제됨
- Local_Disk to Colab_Linux_File_System
- PII.csv & PII.xlsx
- 업로드된 파일 확인
In [2]:
!ls -l
total 20 -rw-r--r-- 1 root root 723 Jul 6 05:02 PII.csv -rw-r--r-- 1 root root 9907 Jul 6 05:02 PII.xlsx drwxr-xr-x 1 root root 4096 Jun 30 13:34 sample_data
I. pandas - DataFrame¶
- Label Index를 가진 2차원 구조
- 일반적으로 다양한 데이터 타입의 열들로 구성
1) pandas Package import ~ as
In [3]:
import pandas as pd
- Version Check
In [4]:
pd.__version__
Out[4]:
'1.5.3'
2) .read_csv( )¶
- CSV(Comma Separated Values)
In [5]:
! pwd
/content
In [6]:
DF1 = pd.read_csv('/content/PII.csv')
- DataFrame
In [7]:
type(DF1)
Out[7]:
pandas.core.frame.DataFrame
In [8]:
DF1
Out[8]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
0 | 송태섭 | 남자 | 21 | 3 | 무 | B | 179.1 | 63.9 |
1 | 최유정 | 여자 | 23 | 1 | 유 | A | 177.1 | 54.9 |
2 | 이한나 | 여자 | 20 | 1 | 무 | A | 167.9 | 50.2 |
3 | 김소혜 | 여자 | 23 | 3 | 무 | O | 176.1 | 53.5 |
4 | 서태웅 | 남자 | 24 | 4 | 무 | B | 176.1 | 79.8 |
5 | 정대만 | 남자 | 24 | 2 | 유 | B | 175.2 | 61.7 |
6 | 이정환 | 남자 | 22 | 4 | 무 | B | 169.1 | 69.8 |
7 | 채소연 | 여자 | 22 | 2 | 유 | AB | 169.9 | 52.7 |
8 | 강백호 | 남자 | 23 | 3 | 무 | O | 165.5 | 68.5 |
9 | 전소미 | 여자 | 22 | 2 | 유 | O | 161.9 | 52.3 |
10 | 변덕규 | 남자 | 21 | 1 | 무 | A | 163.2 | 55.5 |
11 | 정채연 | 여자 | 22 | 2 | 무 | B | 157.8 | 44.9 |
12 | 권준호 | 남자 | 24 | 4 | 유 | O | 166.9 | 61.7 |
13 | 채치수 | 남자 | 23 | 3 | 무 | AB | 181.8 | 85.9 |
14 | 윤대협 | 남자 | 22 | 2 | 유 | AB | 180.3 | 76.2 |
15 | 김세정 | 여자 | 21 | 1 | 무 | O | 155.5 | 44.9 |
16 | 신준섭 | 남자 | 23 | 1 | 무 | A | 168.9 | 62.7 |
3) .to_csv( )
In [9]:
DF1[0:3].to_csv('myCSV.csv', index = None)
- 생성된 CSV 파일 확인
In [10]:
!ls -l
total 24 -rw-r--r-- 1 root root 171 Jul 6 05:04 myCSV.csv -rw-r--r-- 1 root root 723 Jul 6 05:02 PII.csv -rw-r--r-- 1 root root 9907 Jul 6 05:02 PII.xlsx drwxr-xr-x 1 root root 4096 Jun 30 13:34 sample_data
- .read_csv( ) 결과 확인
In [11]:
pd.read_csv('myCSV.csv')
Out[11]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
0 | 송태섭 | 남자 | 21 | 3 | 무 | B | 179.1 | 63.9 |
1 | 최유정 | 여자 | 23 | 1 | 유 | A | 177.1 | 54.9 |
2 | 이한나 | 여자 | 20 | 1 | 무 | A | 167.9 | 50.2 |
4) .read_excel( )
In [12]:
DF2 = pd.read_excel('PII.xlsx')
- DataFrame
In [13]:
type(DF2)
Out[13]:
pandas.core.frame.DataFrame
In [14]:
DF2
Out[14]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
0 | 송태섭 | 남자 | 21 | 3 | 무 | B | 179.1 | 63.9 |
1 | 최유정 | 여자 | 23 | 1 | 유 | A | 177.1 | 54.9 |
2 | 이한나 | 여자 | 20 | 1 | 무 | A | 167.9 | 50.2 |
3 | 김소혜 | 여자 | 23 | 3 | 무 | O | 176.1 | 53.5 |
4 | 서태웅 | 남자 | 24 | 4 | 무 | B | 176.1 | 79.8 |
5 | 정대만 | 남자 | 24 | 2 | 유 | B | 175.2 | 61.7 |
6 | 이정환 | 남자 | 22 | 4 | 무 | B | 169.1 | 69.8 |
7 | 채소연 | 여자 | 22 | 2 | 유 | AB | 169.9 | 52.7 |
8 | 강백호 | 남자 | 23 | 3 | 무 | O | 165.5 | 68.5 |
9 | 전소미 | 여자 | 22 | 2 | 유 | O | 161.9 | 52.3 |
10 | 변덕규 | 남자 | 21 | 1 | 무 | A | 163.2 | 55.5 |
11 | 정채연 | 여자 | 22 | 2 | 무 | B | 157.8 | 44.9 |
12 | 권준호 | 남자 | 24 | 4 | 유 | O | 166.9 | 61.7 |
13 | 채치수 | 남자 | 23 | 3 | 무 | AB | 181.8 | 85.9 |
14 | 윤대협 | 남자 | 22 | 2 | 유 | AB | 180.3 | 76.2 |
15 | 김세정 | 여자 | 21 | 1 | 무 | O | 155.5 | 44.9 |
16 | 신준섭 | 남자 | 23 | 1 | 무 | A | 168.9 | 62.7 |
5) .to_excel( )
In [15]:
DF2[14:].to_excel('myExcel.xlsx', index = None)
- 생성된 Excel 파일 확인
In [16]:
!ls -l
total 32 -rw-r--r-- 1 root root 171 Jul 6 05:04 myCSV.csv -rw-r--r-- 1 root root 5178 Jul 6 05:04 myExcel.xlsx -rw-r--r-- 1 root root 723 Jul 6 05:02 PII.csv -rw-r--r-- 1 root root 9907 Jul 6 05:02 PII.xlsx drwxr-xr-x 1 root root 4096 Jun 30 13:34 sample_data
- .read_excel( ) 결과 확인
In [17]:
pd.read_excel('myExcel.xlsx')
Out[17]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
0 | 윤대협 | 남자 | 22 | 2 | 유 | AB | 180.3 | 76.2 |
1 | 김세정 | 여자 | 21 | 1 | 무 | O | 155.5 | 44.9 |
2 | 신준섭 | 남자 | 23 | 1 | 무 | A | 168.9 | 62.7 |
6) DataFrame Information¶
- .info( )
In [18]:
DF1.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 17 entries, 0 to 16 Data columns (total 8 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Name 17 non-null object 1 Gender 17 non-null object 2 Age 17 non-null int64 3 Grade 17 non-null int64 4 Picture 17 non-null object 5 BloodType 17 non-null object 6 Height 17 non-null float64 7 Weight 17 non-null float64 dtypes: float64(2), int64(2), object(4) memory usage: 1.2+ KB
- .index - 행_정보
In [19]:
DF1.index
Out[19]:
RangeIndex(start=0, stop=17, step=1)
- .columns - 열_정보
In [20]:
DF1.columns
Out[20]:
Index(['Name', 'Gender', 'Age', 'Grade', 'Picture', 'BloodType', 'Height', 'Weight'], dtype='object')
- .values - Array (Numpy의 구조 상속)
In [21]:
DF1.values
Out[21]:
array([['송태섭', '남자', 21, 3, '무', 'B', 179.1, 63.9], ['최유정', '여자', 23, 1, '유', 'A', 177.1, 54.9], ['이한나', '여자', 20, 1, '무', 'A', 167.9, 50.2], ['김소혜', '여자', 23, 3, '무', 'O', 176.1, 53.5], ['서태웅', '남자', 24, 4, '무', 'B', 176.1, 79.8], ['정대만', '남자', 24, 2, '유', 'B', 175.2, 61.7], ['이정환', '남자', 22, 4, '무', 'B', 169.1, 69.8], ['채소연', '여자', 22, 2, '유', 'AB', 169.9, 52.7], ['강백호', '남자', 23, 3, '무', 'O', 165.5, 68.5], ['전소미', '여자', 22, 2, '유', 'O', 161.9, 52.3], ['변덕규', '남자', 21, 1, '무', 'A', 163.2, 55.5], ['정채연', '여자', 22, 2, '무', 'B', 157.8, 44.9], ['권준호', '남자', 24, 4, '유', 'O', 166.9, 61.7], ['채치수', '남자', 23, 3, '무', 'AB', 181.8, 85.9], ['윤대협', '남자', 22, 2, '유', 'AB', 180.3, 76.2], ['김세정', '여자', 21, 1, '무', 'O', 155.5, 44.9], ['신준섭', '남자', 23, 1, '무', 'A', 168.9, 62.7]], dtype=object)
7) Function¶
- .head( )
- 위에서 5행 출력
In [22]:
DF1.head()
Out[22]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
0 | 송태섭 | 남자 | 21 | 3 | 무 | B | 179.1 | 63.9 |
1 | 최유정 | 여자 | 23 | 1 | 유 | A | 177.1 | 54.9 |
2 | 이한나 | 여자 | 20 | 1 | 무 | A | 167.9 | 50.2 |
3 | 김소혜 | 여자 | 23 | 3 | 무 | O | 176.1 | 53.5 |
4 | 서태웅 | 남자 | 24 | 4 | 무 | B | 176.1 | 79.8 |
- .tail( )
- 밑에서 5행 출력
In [23]:
DF1.tail()
Out[23]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
12 | 권준호 | 남자 | 24 | 4 | 유 | O | 166.9 | 61.7 |
13 | 채치수 | 남자 | 23 | 3 | 무 | AB | 181.8 | 85.9 |
14 | 윤대협 | 남자 | 22 | 2 | 유 | AB | 180.3 | 76.2 |
15 | 김세정 | 여자 | 21 | 1 | 무 | O | 155.5 | 44.9 |
16 | 신준섭 | 남자 | 23 | 1 | 무 | A | 168.9 | 62.7 |
- .sort_values( ) - 오름차순
In [24]:
DF1.sort_values(by = 'Height', ascending = True).head()
Out[24]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
15 | 김세정 | 여자 | 21 | 1 | 무 | O | 155.5 | 44.9 |
11 | 정채연 | 여자 | 22 | 2 | 무 | B | 157.8 | 44.9 |
9 | 전소미 | 여자 | 22 | 2 | 유 | O | 161.9 | 52.3 |
10 | 변덕규 | 남자 | 21 | 1 | 무 | A | 163.2 | 55.5 |
8 | 강백호 | 남자 | 23 | 3 | 무 | O | 165.5 | 68.5 |
- .sort_values( ascending = False ) - 내림차순
In [25]:
DF1.sort_values(by = 'Height', ascending = False).head()
Out[25]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
13 | 채치수 | 남자 | 23 | 3 | 무 | AB | 181.8 | 85.9 |
14 | 윤대협 | 남자 | 22 | 2 | 유 | AB | 180.3 | 76.2 |
0 | 송태섭 | 남자 | 21 | 3 | 무 | B | 179.1 | 63.9 |
1 | 최유정 | 여자 | 23 | 1 | 유 | A | 177.1 | 54.9 |
3 | 김소혜 | 여자 | 23 | 3 | 무 | O | 176.1 | 53.5 |
- .describe( )
- 숫자 데이터 통계량
In [26]:
DF1.describe()
Out[26]:
Age | Grade | Height | Weight | |
---|---|---|---|---|
count | 17.000000 | 17.000000 | 17.000000 | 17.000000 |
mean | 22.352941 | 2.294118 | 170.135294 | 61.123529 |
std | 1.169464 | 1.104802 | 7.853896 | 11.867894 |
min | 20.000000 | 1.000000 | 155.500000 | 44.900000 |
25% | 22.000000 | 1.000000 | 165.500000 | 52.700000 |
50% | 22.000000 | 2.000000 | 169.100000 | 61.700000 |
75% | 23.000000 | 3.000000 | 176.100000 | 68.500000 |
max | 24.000000 | 4.000000 | 181.800000 | 85.900000 |
- .mean( )
In [27]:
DF1.mean()
Out[27]:
Age 22.352941 Grade 2.294118 Height 170.135294 Weight 61.123529 dtype: float64
- .median( )
In [28]:
DF1.median()
Out[28]:
Age 22.0 Grade 2.0 Height 169.1 Weight 61.7 dtype: float64
- .var( )
In [29]:
DF1.var()
Out[29]:
Age 1.367647 Grade 1.220588 Height 61.683676 Weight 140.846912 dtype: float64
- std( )
In [30]:
DF1.std()
Out[30]:
Age 1.169464 Grade 1.104802 Height 7.853896 Weight 11.867894 dtype: float64
8) Indexing & Slicing¶
- Lable(Index) 변경
In [31]:
LABEL = ['No_1', 'No_2', 'No_3', 'No_4', 'No_5', 'No_6', 'No_7', 'No_8', 'No_9', 'No_10', 'No_11', 'No_12', 'No_13', 'No_14', 'No_15', 'No_16', 'No_17']
DF1.index = LABEL
In [32]:
DF1
Out[32]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
No_1 | 송태섭 | 남자 | 21 | 3 | 무 | B | 179.1 | 63.9 |
No_2 | 최유정 | 여자 | 23 | 1 | 유 | A | 177.1 | 54.9 |
No_3 | 이한나 | 여자 | 20 | 1 | 무 | A | 167.9 | 50.2 |
No_4 | 김소혜 | 여자 | 23 | 3 | 무 | O | 176.1 | 53.5 |
No_5 | 서태웅 | 남자 | 24 | 4 | 무 | B | 176.1 | 79.8 |
No_6 | 정대만 | 남자 | 24 | 2 | 유 | B | 175.2 | 61.7 |
No_7 | 이정환 | 남자 | 22 | 4 | 무 | B | 169.1 | 69.8 |
No_8 | 채소연 | 여자 | 22 | 2 | 유 | AB | 169.9 | 52.7 |
No_9 | 강백호 | 남자 | 23 | 3 | 무 | O | 165.5 | 68.5 |
No_10 | 전소미 | 여자 | 22 | 2 | 유 | O | 161.9 | 52.3 |
No_11 | 변덕규 | 남자 | 21 | 1 | 무 | A | 163.2 | 55.5 |
No_12 | 정채연 | 여자 | 22 | 2 | 무 | B | 157.8 | 44.9 |
No_13 | 권준호 | 남자 | 24 | 4 | 유 | O | 166.9 | 61.7 |
No_14 | 채치수 | 남자 | 23 | 3 | 무 | AB | 181.8 | 85.9 |
No_15 | 윤대협 | 남자 | 22 | 2 | 유 | AB | 180.3 | 76.2 |
No_16 | 김세정 | 여자 | 21 | 1 | 무 | O | 155.5 | 44.9 |
No_17 | 신준섭 | 남자 | 23 | 1 | 무 | A | 168.9 | 62.7 |
(1) loc(Location)¶
- Label 값 기준
- loc - indexing
- .loc[행_label, 열_label]
In [33]:
DF1.loc['No_3', 'Age']
Out[33]:
20
- 더블 인덱싱
In [34]:
DF1.loc['No_3']['Age']
Out[34]:
20
- loc - Slicing
- .loc[행_label_시작:행_label_끝, 열_label_시작:열_label_끝]
- '행_label_시작' 이상 '행_label_끝' 이하
- '열_label_시작' 이상 '열_label_끝' 이하
In [35]:
DF1.loc['No_3':'No_6', 'Age':'BloodType']
Out[35]:
Age | Grade | Picture | BloodType | |
---|---|---|---|---|
No_3 | 20 | 1 | 무 | A |
No_4 | 23 | 3 | 무 | O |
No_5 | 24 | 4 | 무 | B |
No_6 | 24 | 2 | 유 | B |
- 주의!
In [36]:
DF1.loc['No_3':'No_6']
Out[36]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
No_3 | 이한나 | 여자 | 20 | 1 | 무 | A | 167.9 | 50.2 |
No_4 | 김소혜 | 여자 | 23 | 3 | 무 | O | 176.1 | 53.5 |
No_5 | 서태웅 | 남자 | 24 | 4 | 무 | B | 176.1 | 79.8 |
No_6 | 정대만 | 남자 | 24 | 2 | 유 | B | 175.2 | 61.7 |
In [37]:
DF1.loc['No_3':'No_6']['Age':'BloodType']
Out[37]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight |
---|
(2) iloc(Integer Location)¶
- Index 값 기준
- iloc - indexing
In [38]:
DF1.iloc[2, 2]
Out[38]:
20
In [39]:
DF1.iloc[2][2]
Out[39]:
20
- iloc - Slicing
- .iloc[행_index_시작:행_index_끝, 열_index_시작:열_index_끝]
- '행_index_시작' 이상 '행_index_끝' 미만
- '열_index_시작' 이상 '열_index_끝' 미만
In [40]:
DF1.iloc[2:5, 2:5]
Out[40]:
Age | Grade | Picture | |
---|---|---|---|
No_3 | 20 | 1 | 무 |
No_4 | 23 | 3 | 무 |
No_5 | 24 | 4 | 무 |
- 더블 인덱싱 주의!
In [41]:
DF1.iloc[2:5]
Out[41]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
No_3 | 이한나 | 여자 | 20 | 1 | 무 | A | 167.9 | 50.2 |
No_4 | 김소혜 | 여자 | 23 | 3 | 무 | O | 176.1 | 53.5 |
No_5 | 서태웅 | 남자 | 24 | 4 | 무 | B | 176.1 | 79.8 |
In [42]:
DF1.iloc[2:5][2:5]
Out[42]:
Name | Gender | Age | Grade | Picture | BloodType | Height | Weight | |
---|---|---|---|---|---|---|---|---|
No_5 | 서태웅 | 남자 | 24 | 4 | 무 | B | 176.1 | 79.8 |
II. pandas - Series¶
- Label Index를 가지는 1차원 구조
- 일반적으로 동일한 데이터 타입으로 구성
1) Series from DataFrame¶
- 'Height' Column Series - 1
- DataFrame_Name['Column_Name']
In [47]:
DF1['Height']
Out[47]:
No_1 179.1 No_2 177.1 No_3 167.9 No_4 176.1 No_5 176.1 No_6 175.2 No_7 169.1 No_8 169.9 No_9 165.5 No_10 161.9 No_11 163.2 No_12 157.8 No_13 166.9 No_14 181.8 No_15 180.3 No_16 155.5 No_17 168.9 Name: Height, dtype: float64
- 'Height' Column Series - 2
- DataFrame_Name.Column_Name
In [43]:
DF1.Height
Out[43]:
No_1 179.1 No_2 177.1 No_3 167.9 No_4 176.1 No_5 176.1 No_6 175.2 No_7 169.1 No_8 169.9 No_9 165.5 No_10 161.9 No_11 163.2 No_12 157.8 No_13 166.9 No_14 181.8 No_15 180.3 No_16 155.5 No_17 168.9 Name: Height, dtype: float64
- type( ) - Series
In [44]:
type(DF1['Height'])
Out[44]:
pandas.core.series.Series
In [48]:
DF1[['Height']]
Out[48]:
Height | |
---|---|
No_1 | 179.1 |
No_2 | 177.1 |
No_3 | 167.9 |
No_4 | 176.1 |
No_5 | 176.1 |
No_6 | 175.2 |
No_7 | 169.1 |
No_8 | 169.9 |
No_9 | 165.5 |
No_10 | 161.9 |
No_11 | 163.2 |
No_12 | 157.8 |
No_13 | 166.9 |
No_14 | 181.8 |
No_15 | 180.3 |
No_16 | 155.5 |
No_17 | 168.9 |
In [49]:
type(DF1[['Height']])
Out[49]:
pandas.core.frame.DataFrame
- 'Height' & 'Age' Columns
- DataFrame Structure
In [45]:
DF1[['Height', 'Age']]
Out[45]:
Height | Age | |
---|---|---|
No_1 | 179.1 | 21 |
No_2 | 177.1 | 23 |
No_3 | 167.9 | 20 |
No_4 | 176.1 | 23 |
No_5 | 176.1 | 24 |
No_6 | 175.2 | 24 |
No_7 | 169.1 | 22 |
No_8 | 169.9 | 22 |
No_9 | 165.5 | 23 |
No_10 | 161.9 | 22 |
No_11 | 163.2 | 21 |
No_12 | 157.8 | 22 |
No_13 | 166.9 | 24 |
No_14 | 181.8 | 23 |
No_15 | 180.3 | 22 |
No_16 | 155.5 | 21 |
No_17 | 168.9 | 23 |
- type( ) - DataFrame
In [46]:
type(DF1[['Height', 'Age']])
Out[46]:
pandas.core.frame.DataFrame
2) Function¶
- .count( )
In [50]:
DF1['Height'].count()
Out[50]:
17
- .sum( )
In [51]:
DF1['Height'].sum()
Out[51]:
2892.2999999999997
- .mean( )
In [52]:
DF1['Height'].mean()
Out[52]:
170.13529411764705
- .median( )
In [53]:
DF1['Height'].median()
Out[53]:
169.1
- .var( )
In [54]:
DF1['Height'].var()
Out[54]:
61.68367647058823
- .std( )
In [55]:
DF1['Height'].std()
Out[55]:
7.853895623866428
- .min( )
In [56]:
DF1.Height.min()
Out[56]:
155.5
- .max( )
In [57]:
DF1.Height.max()
Out[57]:
181.8
- .idxmin( )
- Series 최솟값의 인덱스 주소를 반환
In [58]:
DF1.Height.idxmin()
Out[58]:
'No_16'
- .idxmax( )
- Series 최댓값의 인덱스 주소를 반환
In [59]:
DF1.Height.idxmax()
Out[59]:
'No_14'
- .sort_values( ) - 오름차순
In [63]:
DF1.Height.sort_values(ascending = True).head()
Out[63]:
No_16 155.5 No_12 157.8 No_10 161.9 No_11 163.2 No_9 165.5 Name: Height, dtype: float64
- .sort_values( ascending = False ) - 내림차순
In [61]:
DF1.Height.sort_values(ascending = False).head()
Out[61]:
No_14 181.8 No_15 180.3 No_1 179.1 No_2 177.1 No_4 176.1 Name: Height, dtype: float64
3) Indexing & Slicing¶
(1) loc(Location)¶
- Label 값 기준
- loc - indexing
In [64]:
DF1.Height.loc['No_6']
Out[64]:
175.2
- loc - Slicing
- .loc[label_시작, label_끝]
- 'label_시작' 이상 'label_끝' 이하
In [65]:
DF1.Height.loc['No_6':'No_10']
Out[65]:
No_6 175.2 No_7 169.1 No_8 169.9 No_9 165.5 No_10 161.9 Name: Height, dtype: float64
(2) iloc(Integer Location)¶
- Index 값 기준
In [66]:
DF1.Height.iloc[5]
Out[66]:
175.2
- .iloc 생략 가능
In [67]:
DF1.Height[5]
Out[67]:
175.2
- iloc - Slicing
- .iloc[index_시작, index_끝]
- 'index_시작' 이상 'index_끝' 미만
In [68]:
DF1.Height.iloc[5:10]
Out[68]:
No_6 175.2 No_7 169.1 No_8 169.9 No_9 165.5 No_10 161.9 Name: Height, dtype: float64
- .iloc 생략 가능
In [69]:
DF1.Height[5:10]
Out[69]:
No_6 175.2 No_7 169.1 No_8 169.9 No_9 165.5 No_10 161.9 Name: Height, dtype: float64
III. pandas - Visualization¶
1) 선 그래프¶
- kind = 'line'
- style: '-','--','-.', 's-', 'o-', '^-'
- linewidth: 숫자
- color: 16진수 RGB
- figsize: inch
In [76]:
DF1[['Height']].plot(kind = 'line',
style = '--',
linewidth = 2,
color = '#FF0000',
grid = True,
figsize = (10, 7))
Out[76]:
<Axes: >
2) 막대 그래프¶
- kind = 'bar'
- width: 0~1
- rot: 0~360 (범주 이름 rotation )
- fontsize: 글자 크기
In [80]:
DF1[['Height', 'Weight']].plot(kind = 'bar',
width = 0.5,
rot = 45,
fontsize = 15,
figsize = (10, 7))
Out[80]:
<Axes: >
- kind = 'barh' (bar-horizontal)
In [85]:
DF1[['Height', 'Weight']].plot(kind = 'barh',
rot = 5,
color = ['#FA5800', '#A20025'],
fontsize = 12,
figsize = (7, 10))
Out[85]:
<Axes: >
3) 히스토그램¶
- kind = 'hist'
- bins: 구간 개수
- alpha: 0~1 [투명도: 0(투명), 1(불투명)]
In [86]:
DF1['Height'].plot(kind = 'hist',
bins = 5,
alpha = 0.5,
figsize = (10, 7))
Out[86]:
<Axes: ylabel='Frequency'>
In [89]:
DF1['Height'].plot(kind = 'hist',
bins = [157, 160, 170, 175, 180, 182],
alpha = 0.5,
figsize = (10, 7))
Out[89]:
<Axes: ylabel='Frequency'>
4) 상자 그래프¶
- kind = 'box'
In [90]:
DF1['Height'].plot(kind = 'box',
figsize = (7, 9))
Out[90]:
<Axes: >
5) 산점도 - 2가지 연속형 변수의 상관관계 확인¶
- kind = 'scatter'
- s: 숫자
- x, y 두가지 변수 필요
In [91]:
DF1[['Height', 'Weight']].plot(kind = 'scatter',
x = 'Height',
y = 'Weight',
s = 50,
figsize = (10, 7))
Out[91]:
<Axes: xlabel='Height', ylabel='Weight'>
6) 파이 그래프¶
- kind = 'pie'
- 명목형 변수는 숫자형으로 변환 (ex. 카운트)
In [92]:
DF1.BloodType.value_counts().plot(kind = 'pie',
autopct = '%.1f%%',
fontsize = 15,
figsize = (10, 10))
Out[92]:
<Axes: ylabel='BloodType'>
'# Coding > 데이터 분석을 위한 Python' 카테고리의 다른 글
Python 씨본 (0) | 2023.10.02 |
---|---|
Python 데이터 전처리 (0) | 2023.10.02 |
Python 넘파이 (0) | 2023.10.02 |
Python 클래스 & 패키지 (0) | 2023.10.02 |
Python 함수와 모듈 (0) | 2023.10.02 |