Jay's Cookbook
Menu
  • Tags
  • Categories
  • Projects
Computer Science
OS
Network
Data Structure
Algorithm
Language
Code Architecture
Python
Javascript
Typescript
Java
Backend
Backend Theory
TypeORM
Node.js
NestJS
FastAPI
Frontend
HTML/CSS
React
Next.js
Data Engineering
DE Theory
MySQL
MongoDB
Elastic
Redis
Kafka
Spark
Airflow
AI
Basic
Pytorch
NLP
Computer Vision
Data Analytics
Statistics
Pandas
Matplotlib
DevOps
Git
Docker
Kubernetes
AWS
Pandas Series [Part1] 판다스 기초
data_analytics
pandas

Pandas Series [Part1] 판다스 기초

Jay Kim
Jay Kim 20 Jan 2022
시작 Pandas Series [Part2] 판다스 EDA

Table of Contents

  • Series
  • DataFrame
  • Index
    • 인덱스 설정하기
    • 컬럼을 인덱스로 만들기
    • 인덱스를 컬럼으로 만들기
    • 인덱스 재배열
    • 인덱스명 바꾸기
  • 행/열 데이터 추가
    • 행 데이터 추가
    • 열 데이터 추가

Series

  • index가 있는 ndarray
  • Series 안에 data type은 모두 같아야함 (다르게 하면 에러가 나지는 않지만 타입 변환이 일어난다)
  • Series의 data type에 따라 여러 기능들을 제공한다 (ex. df[‘종목명’].str.contains(‘삼성’))
  • Series 간의 연산은 index 기준
  • int형 타입에 하나라도 nan이 있으면 float형이 됨
  • nan > 0 -> False, nan <= 0 -> False : nan 은 0보다 큰 범위에도 속하지 않고, 같거나 작은 범위에도 속하지 않는다 => nan 처리가 중요하다
  • s = pd.Series(data, index, dtype)
pd.Series([3, 4, 5])
----------------------
0    3
1    4
2    5
dtype: int64

pd.Series([3, 4, 5], dtype='float')
--------------------------------------
0    3.0
1    4.0
2    5.0
dtype: float64

pd.Series([3, 4, 5], index=['a', 'b', 'c'])
--------------------------------------------
a    3
b    4
c    5
dtype: int64

pd.Series({'a': 3, 'b': 4, 'c': 5})
--------------------------------------
a    3
b    4
c    5
dtype: int64
x = pd.Series([3, 4, 5, np.nan])

len(x)
x.size
x.count()
------------
4
4
3
x = pd.Series([3, 4, 5, np.nan])

# unique() 에 nan 도 포함된다
x.unique()
----------------------------------
array([ 3.,  4.,  5., nan])

x.value_counts()
--------------------
3.0    1
4.0    1
5.0    1
dtype: int64
x = pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])
y = pd.Series([5, 6, 7, 8], index = ['d', 'c', 'b', 'a'])

x + y
----------------------------------
a    9
b    9
c    9
d    9
dtype: int64


x = pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])
y = pd.Series([5, 6, 7, 8], index = ['c', 'd', 'e', 'f'])

x + y
----------------------------------
a     NaN
b     NaN
c     8.0
d    10.0
e     NaN
f     NaN
dtype: float64

# Series의 add 메서드를 사용하면 fill_value 파라미터를 이용해 더하기 연산을 하기 전에 Nan값을 채울 수 있다
x.add(y, fill_value=0)
----------------------------------
a     1.0
b     2.0
c     8.0
d    10.0
e     7.0
f     8.0
dtype: float64

DataFrame

  • 여러 Series를 index 기준으로 align 시킨 자료형
  • {‘컬럼1’: Series1, ‘컬럼2’: Series2}
pd.DataFrame({'col1': pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
              'col2': pd.Series([4, 5, 6], index=['a', 'b', 'c'])})
--------------------------------------------------------------------------
   col1  col2
a     1     4
b     2     5
c     3     6


pd.DataFrame(data={'col1': [1, 2, 3], 'col2': [4, 5, 6]}, 
             index=['a', 'b', 'c'])
----------------------------------------------------------
   col1  col2
a     1     4
b     2     5
c     3     6

# 단일 리스트는 열이 된다
pd.DataFrame([1, 2, 3, 4], columns=['col1'])
------------------------------------------------
   col1
0     1
1     2
2     3
3     4


# 리스트 안의 리스트는 행이 된다
pd.DataFrame(data=[[1, 4], [2, 5], [3, 6]], 
             columns=['col1', 'col2'], 
             index=['a', 'b', 'c'])
----------------------------------------------
   col1  col2
a     1     4
b     2     5
c     3     6
# index 기준으로 align 한다

x = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
y = pd.Series([4, 5, 6], index=['b', 'c', 'd'])

pd.DataFrame({'col1': x, 'col2': y})
------------------------------------------------
   col1  col2
a   1.0   NaN
b   2.0   4.0
c   3.0   5.0
d   NaN   6.0

Index

인덱스 설정하기

x = pd.Series([1, 2, 3])
x.index = ['a', 'b', 'c']
---------------------------
a    1
b    2
c    3
df = pd.DataFrame([['a', 1, 4], ['b', 2, 5], ['c', 3, 6]], columns=['col1', 'col2', 'col3'])
df
----------------------------------------------------------------------------------------------
  col1  col2  col3
0    a     1     4
1    b     2     5
2    c     3     6

컬럼을 인덱스로 만들기

df.set_index('col1', inplace=True)
------------------------------------
      col2  col3
col1
a        1     4
b        2     5
c        3     6
df.set_index('col2', inplace=True, append=True)
------------------------------------------------
           col3
col1 col2
a    1        4
b    2        5
c    3        6

인덱스를 컬럼으로 만들기

df.reset_index(level='col1', inplace=True)
------------------------------------------------
     col1  col3
col2
1       a     4
2       b     5
3       c     6

인덱스 재배열

df = pd.DataFrame({'col': pd.Series([1, 2, 3], index=['b', 'c', 'd']), 'col2': pd.Series([4, 5, 6], index=['c', 'd', 'e'])})
------------------------------------------
   col  col2
b  1.0   NaN
c  2.0   4.0
d  3.0   5.0
e  NaN   6.0
df.reindex(['a', 'b', 'c', 'd', 'e', 'f'])
------------------------------------------
   col  col2
a  NaN   NaN
b  1.0   NaN
c  2.0   4.0
d  3.0   5.0
e  NaN   6.0
f  NaN   NaN

df.reindex(['a', 'b', 'c', 'd', 'e', 'f'], fill_value=0)
----------------------------------------------------------
   col  col2
a  0.0   0.0
b  1.0   NaN
c  2.0   4.0
d  3.0   5.0
e  NaN   6.0
f  0.0   0.0

# 일부 남아있는 NaN은 reindex로 인한 NaN이 아니라 처음부터 있던 NaN이기 때문에 안 채워진다
# 이런값들은 fillna 로 해결해야 한다

인덱스명 바꾸기

df = pd.DataFrame({'col1': [1, 2, 3], 'col2': [4, 5, 6]}, index=['a', 'b', 'c'])
----------------------------------------------------------------------------------
   col1  col2
a     1     4
b     2     5
c     3     6
df.index.rename('my_index', inplace=True)
------------------------------------------
          col1  col2
my_index
a            1     4
b            2     5
c            3     6
# 인덱스에 대해 정렬
df.sort_index(inplace=True)
df.index.is_monotonic_increasing

행/열 데이터 추가

행 데이터 추가

  • append와 concat이 있지만, append는 deprecated 됐다
df1 = pd.DataFrame([['mike', 15], ['carl', 21], ['bob', 25]], columns=['name', 'age'])
df2 = pd.DataFrame([['steven', 32], ['joey', 24], ['monica', 45]], columns=['name', 'age'])

df1
df2

pd.concat([df1, df2])

pd.concat([df1, df2], ignore_index=True)

pd.concat([df1, df2], keys=['1기', '2기'], names=['기수', 'id'])

열 데이터 추가

df1 = pd.DataFrame([['mike', 15], ['monica', 21], ['bob', 25]], columns=['name', 'age'])
df1.set_index('name', inplace=True)

df2 = pd.DataFrame([['bob', 'M'], ['mike', 'M'], ['monica', 'F']], columns=['name', 'gender'])
df2.set_index('name', inplace=True)

df1
df2

pd.concat([df1, df2], axis=1)

df1 = pd.DataFrame([['mike', 15], ['carl', 21], ['bob', 25]], columns=['name', 'age'])
df2 = pd.DataFrame([['steven', 32], ['joey', 24], ['monica', 45]], columns=['name', 'age'])

pd.concat([df1, df2], axis=1, keys=['1기', '2기'])

시작 Pandas Series [Part2] 판다스 EDA

You may also like

See all pandas
21 Jan 2022 Pandas Series [Part10]: 주피터 노트북에서 시각화를 위한 대시보드 만들기
data_analytics
pandas

Pandas Series [Part10]: 주피터 노트북에서 시각화를 위한 대시보드 만들기

20 Jan 2022 Pandas Series [Part7] 판다스 시계열 데이터
data_analytics
pandas

Pandas Series [Part7] 판다스 시계열 데이터

20 Jan 2022 Pandas Series [Part6] 판다스 조인
data_analytics
pandas

Pandas Series [Part6] 판다스 조인

Jay Kim

Jay Kim

Web development, data engineering for human for the Earth. I share posts, free resources and inspiration.

Rest
Lifestyle
Hobby
Hobby
Hobby
Hobby
2025 © Jay's Cookbook. Crafted & Designed by Artem Sheludko.