Series의 Type 변환하기
1
   | df = pd.read_csv('korean-idol.csv')
  | 
 
  
 1. Series의 Type
 1-1. Type 확인하기
df_name.info() 명령어를 사용하여 Dataframe의 Series Type을 확인할 수 있다
df_name [ “col_name” ] .dtypes 명령어를 사용하여 특정 Series의 Type을 확인할 수 있다
Series Type
- object: 일반 문자영 타입
 
- float: 실수
 
- int: 정수
 
- category: 카테고리
 
- datatime: 시간
 
  
    
       | 
      이름 | 
      그룹 | 
      소속사 | 
      성별 | 
      생년월일 | 
      키 | 
      혈액형 | 
      브랜드평판지수 | 
    
  
  
    
      | 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 | 
    
  
 
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15 entries, 0 to 14
Data columns (total 8 columns):
 #   Column   Non-Null Count  Dtype  
---  ------   --------------  -----  
 0   이름       15 non-null     object 
 1   그룹       14 non-null     object 
 2   소속사      15 non-null     object 
 3   성별       15 non-null     object 
 4   생년월일     15 non-null     object 
 5   키        13 non-null     float64
 6   혈액형      15 non-null     object 
 7   브랜드평판지수  15 non-null     int64  
dtypes: float64(1), int64(1), object(6)
memory usage: 1.1+ KB
dtype('O')
 1-2. Type 변환하기
df_name [ “col_name” ] .astype(…)
e.g.  “키” column을 float에서 int로 변환해보기
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-12-c145a39acdb2> in <module>
----> 1 df["키"].astype(int)
D:\Anaconda\lib\site-packages\pandas\core\generic.py in astype(self, dtype, copy, errors)
   5696         else:
   5697             # else, only a single dtype is given
-> 5698             new_data = self._data.astype(dtype=dtype, copy=copy, errors=errors)
   5699             return self._constructor(new_data).__finalize__(self)
   5700 
D:\Anaconda\lib\site-packages\pandas\core\internals\managers.py in astype(self, dtype, copy, errors)
    580 
    581     def astype(self, dtype, copy: bool = False, errors: str = "raise"):
--> 582         return self.apply("astype", dtype=dtype, copy=copy, errors=errors)
    583 
    584     def convert(self, **kwargs):
D:\Anaconda\lib\site-packages\pandas\core\internals\managers.py in apply(self, f, filter, **kwargs)
    440                 applied = b.apply(f, **kwargs)
    441             else:
--> 442                 applied = getattr(b, f)(**kwargs)
    443             result_blocks = _extend_blocks(applied, result_blocks)
    444 
D:\Anaconda\lib\site-packages\pandas\core\internals\blocks.py in astype(self, dtype, copy, errors)
    623             vals1d = values.ravel()
    624             try:
--> 625                 values = astype_nansafe(vals1d, dtype, copy=True)
    626             except (ValueError, TypeError):
    627                 # e.g. astype_nansafe can fail on object-dtype of strings
D:\Anaconda\lib\site-packages\pandas\core\dtypes\cast.py in astype_nansafe(arr, dtype, copy, skipna)
    866 
    867         if not np.isfinite(arr).all():
--> 868             raise ValueError("Cannot convert non-finite values (NA or inf) to integer")
    869 
    870     elif is_object_dtype(arr):
ValueError: Cannot convert non-finite values (NA or inf) to integer
“키” column에 NaN값이 존재하기 때문에 Error 발생!
column에 NaN 값이 있는 경우: 면저 NaN 값을 다른 값으로 대체한 후 Type을 변환할 수 있다
1
   | df["키"] = df["키"].fillna(-1)
   | 
 
0     173.6
1     177.0
2     180.0
3     178.0
4     162.1
5     178.0
6     182.3
7      -1.0
8     179.2
9     167.1
10     -1.0
11    183.0
12    175.0
13    176.0
14    174.0
Name: 키, dtype: float64
0     173
1     177
2     180
3     178
4     162
5     178
6     182
7      -1
8     179
9     167
10     -1
11    183
12    175
13    176
14    174
Name: 키, dtype: int32
 1-3. 날짜 (datatime) 타입 변환하기
(1) datetime 타입으로 변환하기
pd.to_datetime ( df_name [ “col_nema”] )
0     1995-10-13
1     1988-08-18
2     1996-12-10
3     1995-12-30
4     1995-07-23
5     1997-09-01
6     1995-08-09
7     1998-08-26
8     1992-12-04
9     1994-03-22
10    1989-03-09
11    1997-03-30
12    1995-07-21
13    1995-06-08
14    1993-03-09
Name: 생년월일, dtype: object
1
   | pd.to_datetime(df["생년월일"])
   | 
 
0    1995-10-13
1    1988-08-18
2    1996-12-10
3    1995-12-30
4    1995-07-23
5    1997-09-01
6    1995-08-09
7    1998-08-26
8    1992-12-04
9    1994-03-22
10   1989-03-09
11   1997-03-30
12   1995-07-21
13   1995-06-08
14   1993-03-09
Name: 생년월일, dtype: datetime64[ns]
변환된 것을 원래 column에 다시 대입을 해줘야 정상적으로 변환된 값이 들어간다
1 2
   | df["생년월일"] = pd.to_datetime(df["생년월일"]) df["생년월일"]
   | 
 
0    1995-10-13
1    1988-08-18
2    1996-12-10
3    1995-12-30
4    1995-07-23
5    1997-09-01
6    1995-08-09
7    1998-08-26
8    1992-12-04
9    1994-03-22
10   1989-03-09
11   1997-03-30
12   1995-07-21
13   1995-06-08
14   1993-03-09
Name: 생년월일, dtype: datetime64[ns]
  
(2) datatime 타입을 활용하기
df_name [ “datetime_col” ] .dt
을 활용하여 매우 손쉽게 년, 월, 일, 요일 등등 날짜 정보를 세부적으로 추출해낼 수 있다
- 년: df_name [ “datetime_col” ] .dt.year
 
- 월: df_name [ “datetime_col” ] .dt.month
 
- 일: df_name [ “datetime_col” ] .dt.day
 
- 요일: df_name [ “datetime_col” ] .dt.dayofweek
 
- 주: df_name [ “datetime_col” ] .dt.weekofyear
 
0    1995-10-13
1    1988-08-18
2    1996-12-10
3    1995-12-30
4    1995-07-23
5    1997-09-01
6    1995-08-09
7    1998-08-26
8    1992-12-04
9    1994-03-22
10   1989-03-09
11   1997-03-30
12   1995-07-21
13   1995-06-08
14   1993-03-09
Name: 생년월일, dtype: datetime64[ns]
  
년 추출:
0     1995
1     1988
2     1996
3     1995
4     1995
5     1997
6     1995
7     1998
8     1992
9     1994
10    1989
11    1997
12    1995
13    1995
14    1993
Name: 생년월일, dtype: int64
월 추출:
0     10
1      8
2     12
3     12
4      7
5      9
6      8
7      8
8     12
9      3
10     3
11     3
12     7
13     6
14     3
Name: 생년월일, dtype: int64
  
일 추출:
0     13
1     18
2     10
3     30
4     23
5      1
6      9
7     26
8      4
9     22
10     9
11    30
12    21
13     8
14     9
Name: 생년월일, dtype: int64
  
요일 추출:
월 [0],  화 [1],  수 [2],  목 [3],  금 [4],  토 [5],  일 [6]
0     4
1     3
2     1
3     5
4     6
5     0
6     2
7     2
8     4
9     1
10    3
11    6
12    4
13    3
14    1
Name: 생년월일, dtype: int64
  
주 추출:
1
   | df["생년월일"].dt.weekofyear
   | 
 
0     41
1     33
2     50
3     52
4     29
5     36
6     32
7     35
8     49
9     12
10    10
11    13
12    29
13    23
14    10
Name: 생년월일, dtype: int64