[python] 팬더에서 열 이름 바꾸기

팬더와 열 레이블을 사용하는 DataFrame이 있는데 원래 열 레이블을 바꾸려면 편집해야합니다.

A원래 열 이름이 다음 과 같은 DataFrame 에서 열 이름을 변경하고 싶습니다 .

['$a', '$b', '$c', '$d', '$e'] 

['a', 'b', 'c', 'd', 'e'].

편집 한 열 이름을 목록에 저장했지만 열 이름을 바꾸는 방법을 모르겠습니다.



답변

.columns속성에 지정하십시오 .

>>> df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
>>> df.columns = ['a', 'b']
>>> df
   a   b
0  1  10
1  2  20


답변

특정 열 이름 바꾸기

df.rename()함수를 사용하고 이름을 바꿀 열을 참조하십시오. 모든 열의 이름을 바꿀 필요는 없습니다.

df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
# Or rename the existing DataFrame (rather than creating a copy) 
df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)

최소 코드 예

df = pd.DataFrame('x', index=range(3), columns=list('abcde'))
df

   a  b  c  d  e
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

다음 방법은 모두 작동하며 동일한 출력을 생성합니다.

df2 = df.rename({'a': 'X', 'b': 'Y'}, axis=1)  # new method
df2 = df.rename({'a': 'X', 'b': 'Y'}, axis='columns')
df2 = df.rename(columns={'a': 'X', 'b': 'Y'})  # old method  

df2

   X  Y  c  d  e
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

수정이 제자리에 있지 않으므로 결과를 다시 할당해야합니다. 또는 다음을 지정하십시오 inplace=True.

df.rename({'a': 'X', 'b': 'Y'}, axis=1, inplace=True)
df

   X  Y  c  d  e
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

v0.25부터 errors='raise'유효하지 않은 열 이름 바꾸기가 지정된 경우 오류를 발생 시키도록 지정할 수도 있습니다 . v0.25 rename()문서를 참조하십시오 .


재 할당 열 헤더

사용 df.set_axis()axis=1inplace=False(사본을 반환).

df2 = df.set_axis(['V', 'W', 'X', 'Y', 'Z'], axis=1, inplace=False)
df2

   V  W  X  Y  Z
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

이렇게하면 복사본이 반환되지만 설정을 통해 DataFrame을 내부에서 수정할 수 있습니다 inplace=True(버전 <= 0.24의 기본 동작이지만 향후 변경 될 수 있음).

헤더를 직접 할당 할 수도 있습니다.

df.columns = ['V', 'W', 'X', 'Y', 'Z']
df

   V  W  X  Y  Z
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x


답변

rename메소드는 다음과 같은 함수를 사용할 수 있습니다 .

In [11]: df.columns
Out[11]: Index([u'$a', u'$b', u'$c', u'$d', u'$e'], dtype=object)

In [12]: df.rename(columns=lambda x: x[1:], inplace=True)

In [13]: df.columns
Out[13]: Index([u'a', u'b', u'c', u'd', u'e'], dtype=object)


답변

텍스트 데이터 작업에 설명 된대로 :

df.columns = df.columns.str.replace('$','')


답변

팬더 0.21+ 답변

버전 0.21의 컬럼 이름 변경에 대한 중요한 업데이트가 있습니다.

  • rename방법axis매개 변수를 추가 했습니다.columns 또는1 . 이 업데이트는이 메소드가 나머지 팬더 API와 일치하도록합니다. 그것은 여전히 가지고 indexcolumns 매개 변수가 있지만 더 이상 사용하지 않아도됩니다.
  • set_axis방법inplace세트에 False당신이 목록의 모든 인덱스 또는 열 레이블의 이름을 변경 할 수 있습니다.

팬더 0.21+의 예

샘플 DataFrame을 생성하십시오.

df = pd.DataFrame({'$a':[1,2], '$b': [3,4],
                   '$c':[5,6], '$d':[7,8],
                   '$e':[9,10]})

   $a  $b  $c  $d  $e
0   1   3   5   7   9
1   2   4   6   8  10

사용 rename으로 axis='columns'또는axis=1

df.rename({'$a':'a', '$b':'b', '$c':'c', '$d':'d', '$e':'e'}, axis='columns')

또는

df.rename({'$a':'a', '$b':'b', '$c':'c', '$d':'d', '$e':'e'}, axis=1)

두 가지 모두 결과는 다음과 같습니다.

   a  b  c  d   e
0  1  3  5  7   9
1  2  4  6  8  10

이전 메소드 서명을 계속 사용할 수 있습니다.

df.rename(columns={'$a':'a', '$b':'b', '$c':'c', '$d':'d', '$e':'e'})

rename함수는 각 열 이름에 적용될 함수도 허용합니다.

df.rename(lambda x: x[1:], axis='columns')

또는

df.rename(lambda x: x[1:], axis=1)

사용 set_axis목록과 함께inplace=False

set_axis열 수 (또는 인덱스)와 길이가 같은 메소드에 목록을 제공 할 수 있습니다 . 현재 inplace기본값은 True이지만 이후 릴리스에서는 inplace기본값이 False됩니다.

df.set_axis(['a', 'b', 'c', 'd', 'e'], axis='columns', inplace=False)

또는

df.set_axis(['a', 'b', 'c', 'd', 'e'], axis=1, inplace=False)

왜 사용하지 df.columns = ['a', 'b', 'c', 'd', 'e'] 않습니까?

이와 같이 열을 직접 할당하는 데 아무런 문제가 없습니다. 완벽하게 좋은 솔루션입니다.

사용의 이점은 set_axis메소드 체인의 일부로 사용될 수 있으며 DataFrame의 새 사본을 리턴한다는 것입니다. 이것이 없으면 열을 다시 할당하기 전에 체인의 중간 단계를 다른 변수에 저장해야합니다.

# new for pandas 0.21+
df.some_method1()
  .some_method2()
  .set_axis()
  .some_method3()

# old way
df1 = df.some_method1()
        .some_method2()
df1.columns = columns
df1.some_method3()


답변

모든 열 이름에서 $ 기호 만 제거하려고하므로 다음과 같이하면됩니다.

df = df.rename(columns=lambda x: x.replace('$', ''))

또는

df.rename(columns=lambda x: x.replace('$', ''), inplace=True)


답변

df.columns = ['a', 'b', 'c', 'd', 'e']

기존 이름은 입력 한 순서대로 제공 한 이름으로 바뀝니다.