pandas DataFrame에서 특정 열 이름 변경


195

에서 지정된 열 이름을 변경하는 우아한 방법을 찾고있었습니다 DataFrame.

데이터 재생 ...

import pandas as pd
d = {
         'one': [1, 2, 3, 4, 5],
         'two': [9, 8, 7, 6, 5],
         'three': ['a', 'b', 'c', 'd', 'e']
    }
df = pd.DataFrame(d)

내가 지금까지 찾은 가장 우아한 솔루션 ...

names = df.columns.tolist()
names[names.index('two')] = 'new_name'
df.columns = names

나는 간단한 원 라이너를 기대하고 있었다 ...이 시도는 실패했다 ...

df.columns[df.columns.tolist().index('one')] = 'another_name'

모든 힌트를 감사하게 받았습니다.

답변:


355

하나의 라이너가 존재합니다 :

In [27]: df=df.rename(columns = {'two':'new_name'})

In [28]: df
Out[28]: 
  one three  new_name
0    1     a         9
1    2     b         8
2    3     c         7
3    4     d         6
4    5     e         5

다음은 rename메소드 의 docstring입니다 .

정의 : df.rename (self, index = None, columns = None, copy = True, inplace = False)
독 스트링 :
입력 기능을 사용하여 색인 및 / 또는 열 변경 또는
기능. 함수 / dict 값은 고유해야합니다 (1 대 1). 라벨이 아님
dict / Series에 포함 된 내용은 그대로 유지됩니다.

매개 변수
----------
index : dict-like 또는 function, 선택적
    인덱스 값에 적용 할 변환
열 : dict-like 또는 function, 선택적
    열 값에 적용 할 변환
copy : 부울, 기본 True
    기본 데이터도 복사
inplace : 부울, 기본 False
    새 DataFrame을 반환할지 여부 True이면 복사 값은
    무시되었습니다.

또한보십시오
--------
Series.rename

보고
-------
이름 변경 : DataFrame (새 객체)

@ Jeong-Yoon Lee 회신에 표시된 것처럼 inplace = True를 사용하지 않으면이 기능이 작동하지 않습니다.
JStrahl

109

이후 inplace 인수를 사용할 수, 당신은 복사 자체에 원래의 데이터 프레임 다시 할당해야하지만, 같은 다음하지 않는다 :

df.rename(columns={'two':'new_name'}, inplace=True)

39

이건 어떤가요?

df.columns.values[2] = "new_name"

11
실제로이 작동하지 않음 당신은 안양에서 같은 다른 작업에 열 이름을 사용하는 경우 나중에 [ 'NEW_NAME']
마스터 요구르트

4
이 답변은 특정 열을 새로운 이름으로 변경하는 데 유용했습니다. 첫 번째 열은 인덱스 0, 두 번째 열은 인덱스 1 등입니다. 좋은 해결책 .. 나는 이것이 더 많은 사람들을 도울 것입니다.
ihightower

1
@MasterYogurt 귀하의 의견이 정확하지 않습니다. df['new_name']위에서 설명한대로 변수를 변경 한 후 수행 할 수 있습니다 (및 기타 팬더 항목). 귀하의 의견은 원래 게시되었을 때 유효했을 수 있습니다.
Jacob H

1
즉, rename방법을 사용 하는 것이 더 나은 솔루션입니다.
Jacob H

6

팬더 0.21은 이제 축 매개 변수를 갖습니다

rename 메소드는 나머지 팬더 API의 대부분과 일치하는 축 매개 변수를 얻었습니다.

따라서 이것 외에도

df.rename(columns = {'two':'new_name'})

넌 할 수있어:

df.rename({'two':'new_name'}, axis=1)

또는

df.rename({'two':'new_name'}, axis='columns')

df.rename ({ 'two': 'new_name'}, axis = 'columns') 오류 유형 오류 : 'axis'와 'index'또는 'columns'를 모두 지정할 수 없습니다.
HereHere

@HereHere 팬더 버전 0.21인지 확인하십시오. 수행 pd.__version__버전 확인
테드 페트로 우

5

어떤 열이 (첫 번째 / 두 번째 / n 번째) 열인지 알면 비슷한 질문에 게시 된이 솔루션은 이름이 지정되거나 이름이 지정되지 않은 한 줄에 상관없이 작동합니다. https://stackoverflow.com/a/26336314/ 4355695

df.rename(columns = {list(df)[1]:'new_name'}, inplace=True)
# 1 is for second column (0,1,2..)

3

여기에서 열의 이름을 바꾸려면 두 가지 모두에서 작동하는 간단한 것입니다. Default(0,1,2,etc;) 기존 열과 기존 열 하지만 더 큰 데이터 세트 (많은 열이 있음)에는별로 유용하지 않은 열이 있습니다.

더 큰 데이터 세트의 경우 필요한 열을 슬라이스하고 아래 코드를 적용 할 수 있습니다.

df.columns = ['new_name','new_name1','old_name']

2

다음 짧은 코드가 도움이 될 수 있습니다.

df3 = df3.rename(columns={c: c.replace(' ', '') for c in df3.columns})

열에서 공백을 제거하십시오.


나는 AttributeError: 'int' object has no attribute 'replace'당신이 그걸 계속 확장시킬 수 있었어요 .
Nirmal

2

판다 버전 0.23.4

df.rename(index=str,columns={'old_name':'new_name'},inplace=True)

기록을 위해 :

index = str을 생략하면 오류 대체에 예기치 않은 인수 '열'이 있습니다.


1

다른 옵션은 단순히 열을 복사 하여 삭제 하는 것입니다.

df = pd.DataFrame(d)
df['new_name'] = df['two']
df = df.drop('two', axis=1)
df.head()

그 후에 결과를 얻습니다.

    one three   new_name
0   1   a       9
1   2   b       8
2   3   c       7
3   4   d       6
4   5   e       5

2
이 방법은 열 인덱스의 순서가 중요한 경우에는 도움이되지 않습니다. 새로운 열이 끝에 생성됩니다.
Loochie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.