팬더에서 특정 열의 이름을 바꾸려면 어떻게합니까?
v0.24 이상에서 한 번에 하나 이상의 열 이름을 바꾸려면
한 번에 모든 열의 이름을 바꾸어야하는 경우
rename
와 axis=1
df = pd.DataFrame('x', columns=['y', 'gdp', 'cap'], index=range(5))
df
y gdp cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
0.21+에서는 다음을 사용하여 axis
매개 변수를 지정할 수 있습니다 rename
.
df.rename({'gdp':'log(gdp)'}, axis=1)
# df.rename({'gdp':'log(gdp)'}, axis='columns')
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
( rename
기본적으로 제자리에 있지 않으므로 결과를 다시 할당 해야합니다 .)
이 기능은 나머지 API와의 일관성을 향상시키기 위해 추가되었습니다. 새로운 axis
인수는 columns
매개 변수와 유사 하며 동일한 작업을 수행합니다.
df.rename(columns={'gdp': 'log(gdp)'})
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
rename
또한 각 열에 대해 한 번 호출되는 콜백을 허용합니다.
df.rename(lambda x: x[0], axis=1)
# df.rename(lambda x: x[0], axis='columns')
y g c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
이 특정 시나리오의 경우
df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)
replace
파이썬의 문자열 방법과 유사하게 , pandas Index and Series (객체 dtype 만) str.replace
는 문자열 및 정규식 기반 대체를위한 ( "벡터화 된") 방법을 정의합니다 .
df.columns = df.columns.str.replace('gdp', 'log(gdp)')
df
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
다른 방법에 str.replace
비해이 방법의 장점 은 정규식 (기본적으로 활성화 됨) 을 지원 한다는 것 입니다. 자세한 내용은 문서를 참조하십시오.
에 목록을 전달 set_axis
과axis=1
set_axis
헤더 목록으로 전화하십시오 . 목록의 길이는 열 / 색인 크기와 같아야합니다. set_axis
기본적으로 원본 DataFrame을 변경하지만 inplace=False
수정 된 복사본을 반환하도록 지정할 수 있습니다 .
df.set_axis(['cap', 'log(gdp)', 'y'], axis=1, inplace=False)
# df.set_axis(['cap', 'log(gdp)', 'y'], axis='columns', inplace=False)
cap log(gdp) y
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
참고 : 이후 릴리스에서는 inplace
기본값이로 설정됩니다 True
.
Method Chaining
왜 ? set_axis
를 사용하여 열을 효율적으로 할당 할 수있는 방법을 선택 해야 df.columns = ...
합니까? [이 답변]에서 Ted Petrou가 보여준 것처럼 ( https://stackoverflow.com/a/46912050/4909087 ) set_axis
은 메소드를 연결하려고 할 때 유용합니다.
비교
# 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()
전자는 더 자연스럽고 자유롭게 흐르는 구문입니다.