1.  맷플룻립 Matplotlib 라이브러리

🥑  맷플룻립 라이브러리는 그래프를 그릴 때 가장 많이 사용하는 파이썬 라이브러리 중 하나
🥑  맷플룻립을 활용하면 다양한 유형의 그래프를 간편하게 그릴 수 있음
🥑  시각화할 때 데이터로 리스트나 딕셔너리 자료형도 가능하지만 데이터프레임을 이용하면 새로운 그래프에 적용하는 것이 더 쉽기 때문에 대부분 데이터프레임 자료형을 이용

  ⚡️ matplotlib은 MATLAB(과학 및 공학 연산을 위한 소프트웨어)의 시각화 기능을 모델링해서 만들어짐
  ⚡️ 공식 홈페이지 : https://matplotlib.org/

 

Matplotlib — Visualization with Python

seaborn seaborn is a high level interface for drawing statistical graphics with Matplotlib. It aims to make visualization a central part of exploring and understanding complex datasets. statistical data visualization Cartopy Cartopy is a Python package des

matplotlib.org


 

2. 시각화 옵션

 

1) 제목 지정  title()


🥑  그래프 제목은 title() 메서드를 사용하여 표현
🥑  제목은 기본적으로 영어를 사용하는데, 한글을 사용하려면 별도의 설정을 해야 함

# 제목 지정
import matplotlib.pyplot as plt  # 모듈 import

plt.title('Line Graph')  # 제목 지정
xdata = [2, 4, 6, 8]  # x 축 값 지정
ydata = [1, 3, 5, 7]  # y 축 값 지정
plt.plot(xdata, ydata)
plt.show()

출력 결과

 

 

📍 pyplot.plot() 함수에 리스트(= x축과 y축에 들어갈 값 )를 입력함 

📍 show() 함수는 그래프를 화면에 나타나도록 함

 

 

 

 

 

 

 

 


 

2) 범례

 

🥑  범례란 사용자가 내용을 인지하기 쉽도록 본보기로 표시하는 데 사용

🥑  그래프 범례는 두 개 이상의 데이터를 표현할 때 사용
🥑  범례 추가는 plot()을 활용하여 표현하는 데, plot()의 label 속성값에 원하는 문자열을 작성하고

      그래프를 그리기 전에 legend() 메서드를 실행

# 범례 지정
plt.title('Legend')
data1 = [2, 4, 6, 8]
data2 = [8, 6, 4, 2]
plt.plot(data1, label='asc')
plt.plot(data2, label='desc')
plt.legend()
plt.show()

출력 결과


 

3) 색상 지정

 

🥑  그래프 색상은 plot() 메서드에 color 속성을 추가하여 표현

# 색상 지정
xdata = [2, 4, 6, 8]
ydata = [1, 3, 5, 7]
plt.plot(xdata, ydata, color='red')
plt.show()

출력 결과

 


 

4) x축 및 y축 이름 지정  

 

🥑  x축 이름은 xlabel()를 사용하고, y축 이름은 ylabel()을 사용하여 표현

# x축 및 y축 이름 지정
xdata = [2, 4, 6, 8]
ydata = [1, 3, 5, 7]
plt.plot(xdata, ydata)
plt.xlabel('X value')
plt.ylabel('Y value')
plt.show()

출력 결과

 


5) 그래프 선 모양 지정

 

🥑  그래프 선 모양은 plot()의 linestyle 속성을 이용하여 표현
🥑  linestyle 속성으로 실선은 '-', 파선은 '--', 점쇄선 '-.', 점선은 ':' 기호로 지정

# 그래프 선 모양 지정
xdata = [2, 4, 6, 8]
ydata = [8, 6, 4, 2]
plt.plot(data1, color='r', label='dashed', linestyle='--')
plt.plot(data2, color='g', label='dotted', linestyle=':')
plt.legend()
plt.show()

 

출력 결과

 


 

6) 그림 범위 지정  xlim(), ylim()

 

🥑  plot()을 사용하여 그래프를 표현하다 보면 몇몇 점들은 그림의 범위 경계선에 있어서 잘 보이지 않을 때가 있다
🥑  이 때, xlim() 메서드와 ylim() 메서드를 사용하면 그림의 범위를 수동으로 지정할 수 있다.
        ▶️  xlim(x축 최솟값, x축 최댓값), ylim(y축 최솟값, y축 최댓값)
🥑  plot()의 marker 속성을 지정하면 선에 점 모양을 다양하게 변경할 수 있음

# 그림 범위 지정
plt.title('X, Y range')
xdata = [10, 20, 30, 40]
ydata = [1, 3, 5, 7]
plt.plot(xdata, ydata, color='b', linestyle='--', marker='o', markersize='10')
plt.xlim(0, 50)
plt.ylim(-5, 15)
plt.show()

출력 결과

 


 

3. 내장 시각화 옵션

 

👩🏻‍🚀  판다스를 이용하면 시각화 라이브러리를 임포트 하지 않아도 내장 그래프 도구를 이용하여 기본적인 시각화를 할 수 있음
👩🏻‍🚀  plot()의 kind 속성을 지정하면 다양한 종류의 그래프를 표현할 수 있다.

옵션 종류
line 선 그래프
bar 막대 그래프 - 수직
barh 막대 그래프 - 수평
his 히스토그램 그래프
box 박스 그래프
kde 커널 밀도 그래프
area 면적 그래프
pie 원형 그래프
scatter 산점도 그래프
hexbin 고밀도 산점도 그래프
import pandas as pd

my_score = [[60, 90, 95], [80, 75, 100], [65, 85, 90], 
            [85, 70, 90], [95, 90, 85], [75, 85, 90], [85, 80, 75]]
subject = ['kor', 'math', 'eng']
df = pd.DataFrame(my_score, columns=subject)
df

출력 결과

 

from matplotlib import pyplot as plt

df.plot(kind='line')
plt.show()

출력 결과

 

 

 

 

 

 

[ 내용 참고: IT 학원 강의 및 위키독스 ]


 

1.  컬럼(변수) 삭제 및 생성

# 엑셀 파일 dust1.xlxs 파일을 불러와서 데이터프레임을 생성
import pandas as pd

dust = pd.read_excel('../input/dust1.xlsx')
dust.head()

출력 결과


👩🏻‍🚀  삭제 : drop() 

# 데이터 분석에 필요없는 '지역', '망', '측정소 코드' 컬럼을 삭제하고 특정 값으로 새로운 컬럼을 생성.

dust = dust.drop(['지역', '망', '측정소코드'], axis=1)
# axis의 기본값이 axis=0 으로 행 삭제가 됨. 컬럼을 삭제하기 위해서는 axis=1을 반드시 사용.
dust.head()

출력 결과


 

👩🏻‍🚀  생성  : df['새로운 컬럼명'] = '값'

# 새로운 컬럼 생성
dust['city'] = '서울'
dust.head()

출력 결과

 


 

2. 컬럼 이름 변경

# 전체 변수 이름을 재설정
DataFrame.columns=['새이름1', '새이름2',...]

# 원하는 변수이름만 수정
DataFrame.rename(columns={'기존이름':'새이름'}, inplace=True)

 

dust.rename(columns={'측정소명': 'name', '측정일시': 'date', '주소': 'addr'}, inplace=True)
dust.columns

'''
Index(['name', 'date', 'SO2', 'CO', 'O3', 'NO2', 'PM10', 'PM25', 'addr',
       'city'],
      dtype='object')
'''

 


 

3. 데이터 형변환

dust.dtypes

'''
name     object
date      int64
SO2     float64
CO      float64
O3      float64
NO2     float64
PM10      int64
PM25      int64
addr     object
city     object
dtype: object
'''

 

  📍 date 컬럼이 숫자형(int)로 저장되어 있음
         ▶️ 숫자 형식은 문자 형식으로 변환
  📍 astype(str) : 숫자 ➡️ 문자열 형식으로 변환
  📍 astype(int) : 문자열 ➡️ 숫자 형식으로 변환

 

# 숫자 int 형을 문자열로 변환
dust['date'] = dust['date'].astype(str)
dust['date'] = dust['date'].str.slice(0, 8)
dust.head()

출력 결과


  📍  pd.to_datetime()

# 문자 형식을 날짜형으로 변환
dust['date'] = pd.to_datetime(dust['date'])
dust.dtypes
'''
name            object
date    datetime64[ns]
...
'''

 


  📍 Series.dt.형식

# 날짜 형식 활용 : Series.dt.형식
dust['year'] = dust['date'].dt.year
dust['month'] = dust['date'].dt.month
dust['day'] = dust['date'].dt.day
dust.head()

출력 결과

 


 

4. 데이터 병합

👩🏻‍🚀   merge() 함수는 두 데이터프레임을 각 데이터에 존재하는 고유값(key)을 기준으로 병합할 때 사용

 pd.merge(df_left, df_right, how='inner', on=None)


  📍  기본 값은 on=None이므로 두 데이터의 공동 열이름(id)를 기준으로 inner(교집합) 조인을 하게 됨
  📍  outer 옵션을 줘서 id를 기준으로 합치되, 어느 한 쪽이라도 데이터가 없는 경우 Nan 값이 지정 됨

# 병합할 원본 데이터 확인
s1 = pd.read_excel('../input/nation.xlsx')
s1.head()

출력 결과

s2 = pd.read_excel('../input/code.xlsx')
s2.head()

출력 결과

 

# 데이터 병합 : 공통 컬럼을 기준
pd.merge(s1, s2, on='국적코드')

병합 결과

 


5. 데이터 그룹핑

👩🏻‍🚀  데이터 그룹핑은 데이터를 특정한 값에 기반해 묶는 기능으로 groupby()를 사용하여 통계량을 요약할 수 있음
👩🏻‍🚀  통계량에 관계된 메서드에는 mean(평균), std(표준편차), var(분산), max(최대값), min(최소값) 등이 있음

 

1)  한 열을 기준으로 그룹화 하기

import pandas as pd

s1 = pd.read_excel('../input/nation.xlsx')
s1

출력 결과

s1.groupby('국적코드').sum()
# 국적코드를 그룹별로 합친다. (숫자 뿐만 아니라 문자열도 합침)

출력 결과

 

s1.groupby('성별').sum()
# 성별로 나누어 다른 항목을 합친다.

출력 결과


 

2)  여러 열을 기준으로 그룹화하기

s1.groupby(['국적코드', '성별']).sum()

 

출력 결과

 

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]


 

1. 결측 데이터 처리

👩🏻‍🚀  판다스는 누락된 데이터를 표시할 때 NaN (Not a Number)로 표기하며, 연산에는 표함되지 않음

 

 

1) 결측 데이터 확인

 

✏️  isna() 메서드는 값이 NaN일 때 True, 아닌 경우엔 False 반환

✏️  isnull() 메서드는 결측 데이터이면 True 반환, 유효한 데이터가 존재하면 False를 반환
      ⚡️  isna(), isnull()은 기능적으로 동일

import pandas as pd

df = pd.read_csv('../input/weather.csv', index_col='date')
# 두 개다 결과가 같다.
df['max_wind'].isna()
df['max_wind'].isnull()

'''
출력 결과)
2010-08-01,False
2010-08-02,False
2010-08-03,False
2010-08-04,False
2010-08-05,False
2010-08-06,False
2010-08-07,False
2010-08-08,False
2010-08-09,False
2010-08-10,False
'''

 


 

①  결측 데이터 개수 확인

df.isnull().sum()

'''
temp         0
max_wind     4
mean_wind    6
dtype: int64
'''
df.isnull().value_counts()

'''
temp   max_wind  mean_wind
False  False     False        3646
                 True            3
       True      True            3
                 False           1
Name: count, dtype: int64
'''

 

✏️  notnull()은 유효한 데이터가 존재하면 True를 반환, 결측 데이터면 False를 반환

df.notnull().sum()

'''
temp         3653
max_wind     3649
mean_wind    3647
dtype: int64
'''

 


 

2) 결측 데이터 삭제

 

✏️  결측 데이터를 다루는 가장 간단한 방법은 결측 데이터를 가진 행이나 열을 삭제
✏️  판다스에서 dropna()를 이용하여 삭제 할 수 있다.

✏️  행 데이터 중 어느 한 변수에도 결측치가 있는 경우 삭제되므로 향후 제거한 데이터프레임을 사용하려면 다른 이름으로 저장해야 함

 DataFrame.dropna(axis, how, thresh, subset, inplace)

 

 

  📍 axis : 축을 행 또는 열로 결정
         ➡️  0 또는 'index'이면 누락된 값이 포함된 행을 삭제
         ➡️  1 또는 'columns'이면 누락된 값이 포함된 열을 삭제
         ➡️  기본값은 0
  📍 how any는 null 값이 있는 경우 행 또는 열을 삭제
                    all은 모든 값이 누락된 경우 행 또는 열을 삭제
                    기본값은 any
  📍 inplace : 데이터프레임에 나온 값을 저장할 것인지를 설정하는 변수로 기본적으로 값은 False

 

# 결측 데이터가 있는 행 삭제 후 확인
df2 = df.dropna()  # 옵션을 지정하지 않아서 행기준, NaN가 하나라도 있는 경우에 삭제.
df2.isnull().sum()

'''
temp         0
max_wind     0
mean_wind    0
dtype: int64
'''

 

# 원본 데이터는 변경 x
df.isnull().sum()
'''
temp         0
max_wind     4
mean_wind    6
dtype: int64
'''

 


 

3)  결측 데이터 대체

 

✏️  fillna() : 결측 데이터를 특정 값으로 채움. inplace를 True로 설정해 원본 데이터를 수정

# 결측 데이터 대체하기 : 평균값으로 대체
df['max_wind'].fillna(df['max_wind'].mean(), inplace=True)
df['mean_wind'].fillna(df['mean_wind'].mean(), inplace=True)

# 결측 데이터 대체 후 확인
df.isna().sum()
'''
temp         0
max_wind     0
mean_wind    0
dtype: int64
'''

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]


 

1.  데이터 파일 저장

DataFrame_data.to_csv(file_name [, options])

 

🚀  to_csv()을 이용하면 DataFrame 형식의 데이터를 텍스트 파일로 저장

🚀  file_name은 텍스트 파일 이름으로 경로를 포함할 수 있음
🚀  선택사항인 options에는 구분자와 문자의 인코딩 방식 등을 지정

       ⚡️ 지정하지 않으면 구분자는 콤마가 되고, 문자의 인코딩 방식은 'utf-8'이 됨

 

# 네 명의 몸무게 Weight와 키 Height 데이터를 DataFrame 형식으로 생성.
df_WH = pd.DataFrame({'Weight': [62, 67, 55, 74],
                      'Height': [165, 177, 160, 180]},
                      index=['ID_1', 'ID_2', 'ID_3', 'ID_4'])
df_WH

df_WH 출력 결과

# index명 지정하는 경우
df_WH.index.name = 'User'
df_WH

df_WH 출력 결과

 


 📌  텍스트 파일 사용 예시

file_name = '../output/save_DataFrame_cp949.txt'
df_pr.to_csv(file_name, sep=' ', encoding='cp949')

 

2. 데이터 확인

1) DataFrame 만들기

import pandas as pd

# csv 파일 불러오기

df = pd.read_csv('../input/weather.csv')
print(df)

출력 결과


 

2) df.shape

 

👾  shape 속성을 이용하면 데이터의 (행, 열) 크기를 확인할 수 있음

df.shape
# 출력 결과 : (3653, 4)

df.shape[0]
# 출력 결과 : 3653

 


 

3) df.info()

 

👾  info()메서드는 데이터에 대한 전반적인 정보를 나타냄
👾  df를 구성하는 행과 열의 크기, 컬럼명, 컬럼을 구성하는 값의 자료형을 출력해 줌

df.info()

'''
출력 결과)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3653 entries, 0 to 3652
Data columns (total 4 columns):
 #   Column     Non-Null Count  Dtype  
---  ------     --------------  -----  
 0   date       3653 non-null   object 
 1   temp       3653 non-null   float64
 2   max_wind   3649 non-null   float64
 3   mean_wind  3647 non-null   float64
dtypes: float64(3), object(1)
memory usage: 114.3+ KB
'''

 

  📌  데이터 개수 n=3653 entry, 행 인덱스 번호 0 to 3652
  📌  열 변수 출력 형식 : 실수 float, 문자열 object
  📌  결측치 개수가 나타남 : max_wind, mean_wind 변수에 결측치가 있음 (= 값이 없는 칸이 존재 )

 


 

4) df.head() / df.tail()

 

👾  데이터를 잘 불러 왔는지 확인하기 위해 앞 부분(head)과 마지막 부분(tail)을 확인
👾  head()는 상위 5개 행을 출력하고, tail()은 하위 5개 행을 출력
👾 괄호() 안에 원하는 숫자를 넣으면 그 숫자만큼 행을 출력

# 상위 5행
df.head(5)

출력 결과

# 하위 n행 살펴보기
df.tail()

출력 결과

 


 

5) df.index, df.columns

 

👾  인덱스(행 이름)과 열의 레이블(칼럼 이름)을 출력할 때 사용

# 인덱스 출력
df.index
# 데이터프레임의 인덱스(행 이름)을 반환. 인덱스를 따로 지정하지 않았기 때문에 0부터 시작하는 인덱스가 부여.
# 출력 결과 : RangeIndex(start=0, stop=3653, step=1)
# 컬럼 출력
df.columns
# 출력 결과: Index(['date', 'temp', 'max_wind', 'mean_wind'], dtype='object')

  

 📌  해당 데이터프레임을 구성하는 컬럼명을 확인할 수 있음
 📌  컬럼명을 변경할 때도 유용하게 사용

 


 

6) df.describe()

 

👾  데이터의 컬럼별 요약 통계량을 나타냄
👾  mean(), max() 등 개별 함수를 사용하여 통계량을 계산 할 수 있음

# 요약 통계량 확인하기.
df.describe()

출력 결과


 

7) df.sort_values()

 

👾  데이터를 크기 순으로 정렬

# 형식
DataFrame.sort_values(by=['정렬변수1', '정렬변수2'...], ascending=True, inplace=False


  📌  by=[] : by=을 사용하지 않아도 됨
  📌  ascending=True : True가 기본 값이고 오름차순 정렬. 내림차순 정렬일 경우에는 False 사용.
  📌  inplace=False : True 이면 정렬 결과가 동일 데이터프레임 이름으로 저장. 기본 값은 False.

 

# 최대 풍속 max_wind 컬럼의 값의 크기에 따라 오름차순 정렬
df.sort_values(['max_wind'])

출력 결과

# 최대 풍속 max_wind 컬럼의 값의 크기에 따라 내림차순 정렬
df.sort_values(by=['max_wind'], ascending=False)

출력 결과

 


 

8) df.value_counts()

 

👾  범주형 변수의 빈도분석 결과를 출력, 즉 어떤 컬럼의 unique value(고유값)들의 개수를 구함

bank = pd.read_csv('../input/bank.csv')

# 빈도 분석 출력하기
bank['job'].value_counts()

'''
출력 결과)
job
management       1560
blue-collar      1499
technician       1206
admin.            834
services          661
retired           351
self-employed     256
entrepreneur      239
unemployed        223
housemaid         208
student           153
Name: count, dtype: int64
'''
bank['job'].value_counts(ascending=True)
# -> 위의 결과를 오름차순으로 정렬

 


 

9) df.unique()

 

👾  데이터가 무엇으로 구성되어 있는지 보고 싶을 때 사용. 열의 고유값을 볼 수 있음

# column의 고유값 출력하기
bank['job'].unique()

'''
출력 결과)
array(['management', 'technician', 'blue-collar', 'retired', 'services',
       'admin.', 'entrepreneur', 'self-employed', 'unemployed', 'student',
       nan, 'housemaid'], dtype=object)
'''

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]


 

1. 통계  메서드

sum() 원소의 합
mean()  평균
std() 표준편차
var() 분산
min() 최솟값
max() 최댓값
cumsum() 원소의 누적 합
cumprod() 원소의 누적 곱

 

# 2012년 부터 2016년 까지 우리나라의 계절별 강수량(단위 mm).
table_data3 = {'봄': [256.5, 264.3, 215.9, 223.2, 312.8],
               '여름': [770.6, 567.5, 599.8, 387.1, 446.2],
               '가을': [363.5, 231.2, 293.1, 247.7, 381.6],
               '겨울': [139.3, 59.9, 76.9, 109.1, 108.1]}
columns_list = ['봄', '여름', '가을', '겨울']
index_list = ['2012', '2013', '2014', '2015', '2016']
df3 = pd.DataFrame(table_data3, columns=columns_list, index=index_list)
df3

df3 출력 결과

 

# 2012년에서 2016년에 걸쳐 계절별로 강수량의 평균(mean)과 표준 편차(std)를 구함.
df3.mean()
'''
봄     254.54
여름    554.24
가을    303.42
겨울     98.66
dtype: float64
'''

df3.std()  # 계절별 강수량 표준편차
'''
봄      38.628267
여름    148.888895
가을     67.358496
겨울     30.925523
dtype: float64
'''

 

    📌  연도별로 평균 강수량과 표준 편차를 구할 경우엔 연산의 방향 설정을 위해 axis인자를 추가
    📌  인자 axis가 0이면 DataFrame의 values에서 열별로 연산을 수행하고, 1이면 행별로 연산

    📌  axis 인자를 설정하지 않으면 기본값을 0으로 설정

 

df3.mean(axis=1)
'''
2012    382.475
2013    280.725
2014    296.425
2015    241.775
2016    312.175
dtype: float64
'''

df3.std(axis=1)
'''
2012    274.472128
2013    211.128782
2014    221.150739
2015    114.166760
2016    146.548658
dtype: float64
'''

💡  df.describe()

 

  -  평균, 표준편차, 최솟값과 최댓값 등을 한 번에 구할 수 있는 메서드
  -  25%, 50%, 75% : 백분위수의 각 지점으로, 분포를 반영해 평균을 보완하는 목적으로 사용

df3.describe()

 

출력 결과


 

2.  판다스 데이터  읽기

1) 표 형식 데이터 읽기

🍯  판다스에서 csv파일을 읽을 때는 read_csv() 메서드 이용

🍯  파이썬에서 텍스트파일을 생성하면 기본 문자 인코딩이 ’utf-8’이고, 메모장의 경우 기본 문자 인코딩이 ‘cp949’

DataFrame_data = pd.read_csv(file_name [, options])

 

import pandas as pd

df1 = pd.read_csv('../input/sea_rain1.csv')
df1

 

출력 결과

df1.dtypes
'''
연도      int64
동해    float64
남해    float64
서해    float64
전체    float64
dtype: object
'''

pd.read_csv('../input/sea_rain1_from_notepad.csv')
# UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: 
# invalid start byte

 

    📌  sea_rain1_from_notepad.csv 파일을 메모장으로 생성해서, 인코딩이 'cp949'이므로 에러가 남

            ▶️  메소드 안에 encoding='cp949' 를 붙여주면 된다.

# 올바른 실행 예
pd.read_csv('../input/sea_rain1_from_notepad.csv', encoding='cp949')

 

🍯  txt 파일의 경우 콤마가 아니라 공백(빈칸)으로 구분된 경우 sep 옵션을 이용해서 구분자가 콤마가 아니라 공백임을 지정
🍯  아래 처럼 확장자가 txt라도 read_csv()로 읽을 수 있음.

pd.read_csv('../input/sea_rain1_space.txt', sep=' ')

 

📌  read_csv()로 텍스트 파일을 읽어오면 index가 자동으로 지정
📌  이 때 특정 열 column을 index로 선택하려면

       'index_col=열_이름'을 추가

 

 

pd.read_csv('../input/sea_rain1.csv', index_col='연도')

출력 결과

 

 

 

 

 

[ 내용 참고 :  IT 학원 강의 ]


 

1.  DataFrame을 활용한 데이터 생성

 

🍯  표 Table와 2차원 데이터 처리를 위해 DataFrame을 제공
       ▶️  데이터 Data를 담는 틀 Frame이라는 뜻

 

 

1) 데이터 생성

df = pd.DataFrame(data [, index = index_data, columns = columns_data])


  🐰  data 인자에는 리스트와 형태가 유사한 데이터 타입은 모두 사용 가능
        🥕  리스트, 딕셔너리, numpy의 배열 데이터, Series나 DataFrame 타입의 데이터 입력 가능
  🐰  세로축 라벨을 index라 하고, 가로축 라벨을 columns 라고 함
  🐰  index와 columns를 제외한 부분을 values라고 함

 

import pandas as pd
d1 = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]])
d1

d1 결과

 

🥕  values 부분에는 입력한 data가 순서대로 입력 돼 있고 가장 좌측의 열과 가장 윗줄의 행에는 각각 숫자가 자동으로 생성되어 index, columns를 구성
  ▶️   명시적으로 입력하지 않더라도 자동으로 index, columns가 생성

 

 


 

📁  numpy의 배열 데이터를 입력해 생성한 DataFrame 데이터의 예

import numpy as np
data_list = np.array([[10,20,30], [40,50,60], [70,80,90]])
print(data_list)
'''
[[10 20 30]
 [40 50 60]
 [70 80 90]]
'''

d2 = pd.DataFrame(data_list)
d2

d2 출력 결과


 

📁 data뿐만 아니라 index와 columns도 지정한 예

data = np.array([[1,2,3], [4,5,6], [7,8,9], [10,11,12]])  # values
index_date = pd.date_range('2019-09-01', periods=4)
columns_list = ['A', 'B', 'C']
d3 = pd.DataFrame(data=data, index=index_date, columns=columns_list)
d3

d3 출력 결과


 

📁  딕셔너리 타입으로 2차원 데이터를 입력한 예

 

      📌  리스트나 넘파이 배열은 행 단위로 입력이 되고, 딕셔너리는 열 단위로 입력됨

table_data = {'연도': [2015, 2016, 2016, 2017, 2017],
              '지사': ['한국', '한국', '미국', '한국', '미국'],
              '고객 수': [200, 250, 450, 300, 500]}
d4 = pd.DataFrame(table_data)

d4 출력 결과

# 입력시 키의 순서를 지정할 수도 있음.
d5 = pd.DataFrame(table_data, columns=['지사', '고객 수', '연도'])
d5

d5 출력 결과


 

📁  DataFrame 데이터에서 index, columns, values을 각각 구한 예

d5.index
# RangeIndex(start=0, stop=5, step=1)

d5.columns
# Index(['지사', '고객 수', '연도'], dtype='object')

d5.values
# 0,한국,200,2015
# 1,한국,250,2016
# 2,미국,450,2016
# 3,한국,300,2017
# 4,미국,500,2017

 


 

2.  데이터 연산

🍯  Pandas의 Series()와 DataFrame()으로 생성된 데이터 끼리는 사칙연산이 가능

🍯  파이썬의 리스트와 numpy의 배열과 달리 pandas의 데이터 끼리는 서로 크기가 달라도 연산이 가능
        ▶️  이 경우 연산을 할 수 있는 항목만 연산을 수행

 

1)  Series()로 생성한 데이터의 예

import pandas as pd

s1 = pd.Series([1,2,3,4,5])
s2 = pd.Series([10,20,30,40,50])
# 덧셈
s1 + s2

'''
0    11
1    22
2    33
3    44
4    55
dtype: int64
'''
# 뺄셈
s2 - s1

'''
0     9
1    18
2    27
3    36
4    45
dtype: int64
'''
# 곱셈
s1 * s2

'''
0     10
1     40
2     90
3    160
4    250
dtype: int64
'''
# 나눗셈
s2 / s1

'''
0    10.0
1    10.0
2    10.0
3    10.0
4    10.0
dtype: float64
'''

 


 

2) 데이터의 크기가 다른 경우

 

🐰   연산할 수 있는 부분만 연산한 결과를 보여주고 연산할 수 없는 부분은 NaN으로 표시

s3 = pd.Series([1,2,3,4])
s4 = pd.Series([10,20,30,40,50])
# 덧셈
s3 + s4

'''
0    11.0
1    22.0
2    33.0
3    44.0
4     NaN
dtype: float64
'''
# 뺄셈
s4 - s3

'''
0     9.0
1    18.0
2    27.0
3    36.0
4     NaN
dtype: float64
'''
# 곱셈
s3 * s4

'''
0     10.0
1     40.0
2     90.0
3    160.0
4      NaN
dtype: float64
'''
# 나눗셈
s4 / s3

'''
0    10.0
1    10.0
2    10.0
3    10.0
4     NaN
dtype: float64
'''

 


3) DataFrame 연산

 

🐰  Series와 마찬가지로 DataFrame도 연산할 수 있는 항목 끼리만 연산하고 그렇지 못한 항목은 NaN으로 표시
        🥕 공간은 차지하되 데이터는 없는 상태

# DataFrame()으로 생성한 데이터의 예
table_data1 = {'A': [1,2,3,4,5],
               'B': [10,20,30,40,50],
               'C': [100,200,300,400,500]}
df1 = pd.DataFrame(table_data1)
df1

table_data2 = {'A': [6,7,8],
               'B': [60,70,80],
               'C': [600,700,800]}
df2 = pd.DataFrame(table_data2)
df2

 

df 1 출력결과
df2 출력 결과

df1 + df2

출력 결과

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]

+ Recent posts