'ValueError: Length mismatch: Expected axis has 3 elements'에 해당되는 글 1건

  1. 2019.08.14 [Python pandas] DataFrame의 칼럼 이름 바꾸기 : df.columns = [], df.rename(columns) 2

이번 포스팅에서는 Python pandas DataFrame의 칼럼 이름 바꾸는 방법(how to change column name in python pandas DataFrame), index 이름을 바꾸는 방법(how to change index name in python pandas DataFrame)을 소개하겠습니다. 

 

(1) pandas DataFrame의 칼럼 이름 바꾸기

    :  df.columns = ['a', 'b']

    :  df.rename(columns = {'old_nm' : 'new_nm'}, inplace = True)

(2) pandas DataFrame의 인덱스 이름 바꾸기

    : df.index = ['a', 'b']

    : df.rename(index = {'old_nm': 'new_nm'}, inplace = True)

 

 

 

  (1) Python pandas DataFrame 의 칼럼 이름 바꾸기

 

예제로 사용할 간단한 pandas DataFrame을 만들어보겠습니다. 

 

In [1]: import pandas as pd


In [2]: df = pd.DataFrame({'id': ['a', 'b', 'c', 'd'],
   ...: 'col_1': [1, 2, 3, 4],
   ...: 'col_2': [1, 1, 2, 2]},
   ...: columns = ['id', 'col_1', 'col_2'])


In [3]: df
Out[3]:
  id  col_1  col_2
0  a      1      1
1  b      2      1
2  c      3      2
3  d      4      2


In [4]: df.columns


Out[4]: Index(['id', 'col_1', 'col_2'], dtype='object')

 

 

 

(1-1) df.columns = ["new_1", "new_2"] 를 이용한 칼럼 이름 바꾸기

 

In [5]: df.columns = ["group", "val_1", "val_2"]


In [6]: df
Out[6]:
  group  val_1  val_2
0     a      1      1
1     b      2      1
2     c      3      2
3     d      4      2

 

 

df.columns 메소드를 사용해서 칼럼 이름을 변경하고자 하는 경우, DataFrame의 칼럼 개수 (number of columns in DataFrame)를 정확하게 일치시켜주어야 합니다. DataFrame의 칼럼 개수와 df.columns = [xx, xx, ...] 의 칼럼 개수가 서로 다를 경우 ValueError: Length mismatch 에러가 발생합니다. 

 

# need to match the number of columns
# ValueError: Length mismatch
In [7]: df.columns = ["group", "val_1"] # length mismatch error
   ...:
Traceback (most recent call last):


File "<ipython-input-7-5ab3ecd42fe8>", line 1, in <module>
df.columns = ["group", "val_1"]
... 중간 생략 ...


File "C:\Users\admin\Anaconda3\lib\site-packages\pandas\core\internals\managers.py", line 155, in set_axis
'values have elements'.format(old=old_len, new=new_len))


ValueError: Length mismatch: Expected axis has 3 elements, new values have 2 elements

 

 

 

(1-2) df.rename(columns = {"old_1": "new_1", "old_2": "new_2"}, inplace=True) 를 이용하여 칼럼 이름 변경하기

 

In [8]: df.rename(columns = {"id": "group",
   ...: "col_1": "val_1",
   ...: "col_2": "val_2"}, inplace = True)
   ...:
In [9]: df


Out[9]:
  group  val_1  val_2
0     a      1      1
1     b      2      1
2     c      3      2
3     d      4      2

 

 

df.columns 메소드와는 달리 df.rename(columns = {'old': 'new'}) 함수는 DataFrame의 칼럼 개수를 맞추어줄 필요가 없으며, 특정 칼럼 이름만 선별적으로 바꿀 수 있습니다. 아래 예제는 "group" 칼럼 이름을 "ID_2" 라는 새로운 칼럼 이름으로 바꾸어준 예입니다. 

In [10]: df.rename(columns = {"group": "ID_2"}, inplace = True)


In [11]: df
Out[11]:
  ID_2  val_1  val_2
0    a      1      1
1    b      2      1
2    c      3      2
3    d      4      2

 

 

lambda 함수를 사용하여서 기존 DataFrame의 칼럼 앞에 "X_" 라는 접두사(prefix)를 붙인 새로운 칼럼 이름을 만들어보겠습니다. 

 

In [14]: df = pd.DataFrame({'id': ['a', 'b', 'c', 'd'],
    ...: 'col_1': [1, 2, 3, 4],
    ...: 'col_2': [1, 1, 2, 2]},
    ...: columns = ['id', 'col_1', 'col_2'])


In [15]: df
Out[15]:
  id  col_1  col_2
0  a      1      1
1  b      2      1
2  c      3      2
3  d      4      2


In [16]: df.rename(columns = lambda x: "X_" + x, inplace = True)


In [17]: df
Out[17]:
  X_id  X_col_1  X_col_2
0    a        1        1
1    b        2        1
2    c        3        2
3    d        4        2

 

 

 

  (2) DataFrame의 Index 이름 바꾸기

 

(2-1) df.index = ['new_idx1', 'new_idx2'] 을 이용하여 Index 이름 바꾸기

 

이때 DataFrame의 index 개수와 바꾸고자 하는 index 이름의 개수를 서로 맞추어주어야 합니다. 

 

In [17]: df
Out[17]:
  X_id  X_col_1  X_col_2
0    a        1        1
1    b        2        1
2    c        3        2
3    d        4        2


In [18]: df.index
Out[18]: RangeIndex(start=0, stop=4, step=1)


In [19]: df.index = ['a', 'b', 'c', 'd']


In [20]: df
Out[20]:
  X_id  X_col_1  X_col_2
a    a        1        1
b    b        2        1
c    c        3        2
d    d        4        2

 

 

(2-2) df.rename(index = {'old_idx': 'new_idx'}, inplace = True) 를 이용한 index 이름 바꾸기

 

In [21]: df.rename(index = {0: 'a',
    ...: 1: 'b',
    ...: 2: 'c',
    ...: 3: 'd'}, inplace = True)


In [22]: df
Out[22]:
  X_id  X_col_1  X_col_2
a    a        1        1
b    b        2        1
c    c        3        2
d    d        4        2

 

 

pandas DataFrame의 칼럼 순서 변경하기는 https://rfriend.tistory.com/680 를 참고하세요. 

 

많은 도움이 되었기를 바랍니다. 

이번 포스팅이 도움이 되었다면 아래의 '공감~

'를 꾹 눌러주세요. :-)

 

728x90
반응형
Posted by Rfriend
,