팬더에서 특정 열 이름 바꾸기
'데이터프레임'이 있는데data
단일 열 머리글의 이름을 변경하려면 어떻게 해야 하는가?예를 들면gdp
로log(gdp)
?
data =
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
data.rename(columns={'gdp':'log(gdp)'}, inplace=True)
명령어를 매개 변수로 받아들이는 프로그램columns
한 항목으로 받아쓰기를 통과하면 돼
관련 항목도 참조하십시오.
훨씬 더 빠른 구현으로list-comprehension
단일 열 이름을 변경해야 할 경우
df.columns = ['log(gdp)' if x=='gdp' else x for x in df.columns]
여러 열의 이름을 변경해야 하는 경우 다음과 같은 조건부 식을 사용하십시오.
df.columns = ['log(gdp)' if x=='gdp' else 'cap_mod' if x=='cap' else x for x in df.columns]
또는 다음을 사용하여 매핑을 생성하십시오.dictionary
그리고 공연하다list-comprehension
의기 투합하여get
기본값을 이전 이름으로 설정하여 작업:
col_dict = {'gdp': 'log(gdp)', 'cap': 'cap_mod'} ## key→old name, value→new name
df.columns = [col_dict.get(x, x) for x in df.columns]
시간:
%%timeit
df.rename(columns={'gdp':'log(gdp)'}, inplace=True)
10000 loops, best of 3: 168 µs per loop
%%timeit
df.columns = ['log(gdp)' if x=='gdp' else x for x in df.columns]
10000 loops, best of 3: 58.5 µs per loop
팬더에서 특정 칼럼의 이름을 어떻게 바꾸는가?
v0.24+에서 한 번에 하나 이상의 열 이름을 바꾸려면
DataFrame.rename()
또는 (그)와 함께axis
에 논쟁이 도입되었다.v0.21
.Index.str.replace()
문자열/regex 기반 교체용.
한 번에 모든 열의 이름을 변경해야 하는 경우,
DataFrame.set_axis()
로 처리하다.axis=1
. 목록과 같은 순서를 통과한다.사내 수정 시 옵션도 이용할 수 있다.
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
기본적으로 inplace가 아니므로 결과를 다시 할당해야 한다.)
이 추가는 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)
Index.str.replace
와 유사하다.replace
python, panders Index 및 Series(객체 dtype만 해당)의 문자열 방법 a("벡터화된") 정의str.replace
문자열 및 regex 기반 교체 방법.
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
regex 지원(기본적으로 활성화됨)자세한 내용은 문서를 참조하십시오.
목록 전달 대상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
.
메서드 체인
선택한 이유set_axis
열 할당을 효율적으로 수행할 수 있는 경우df.columns = ...
Ted Petrou가 이 대답에서 보여주듯이. 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()
전자는 더 자연스럽고 자유분방한 구문이다.
판다의 특정 칼럼의 이름을 바꾸는 방법에는 적어도 다섯 가지가 있는데, 나는 원문에 대한 링크와 함께 아래에 열거했다.나는 또한 이러한 방법들의 타이밍을 맞추었고 그것들이 거의 동일한 것을 발견했다. (그러나 당신의 데이터 세트와 시나리오에 따라 YMMV가 달라진다.)아래의 테스트 케이스는 열 이름을 바꾸는 것이다.A
M
N
Z
로A2
M2
N2
Z2
열로 된 데이터 틀에서.A
로Z
100만 행을 포함하는
# Import required modules
import numpy as np
import pandas as pd
import timeit
# Create sample data
df = pd.DataFrame(np.random.randint(0,9999,size=(1000000, 26)), columns=list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'))
# Standard way - https://stackoverflow.com/a/19758398/452587
def method_1():
df_renamed = df.rename(columns={'A': 'A2', 'M': 'M2', 'N': 'N2', 'Z': 'Z2'})
# Lambda function - https://stackoverflow.com/a/16770353/452587
def method_2():
df_renamed = df.rename(columns=lambda x: x + '2' if x in ['A', 'M', 'N', 'Z'] else x)
# Mapping function - https://stackoverflow.com/a/19758398/452587
def rename_some(x):
if x=='A' or x=='M' or x=='N' or x=='Z':
return x + '2'
return x
def method_3():
df_renamed = df.rename(columns=rename_some)
# Dictionary comprehension - https://stackoverflow.com/a/58143182/452587
def method_4():
df_renamed = df.rename(columns={col: col + '2' for col in df.columns[
np.asarray([i for i, col in enumerate(df.columns) if 'A' in col or 'M' in col or 'N' in col or 'Z' in col])
]})
# Dictionary comprehension - https://stackoverflow.com/a/38101084/452587
def method_5():
df_renamed = df.rename(columns=dict(zip(df[['A', 'M', 'N', 'Z']], ['A2', 'M2', 'N2', 'Z2'])))
print('Method 1:', timeit.timeit(method_1, number=10))
print('Method 2:', timeit.timeit(method_2, number=10))
print('Method 3:', timeit.timeit(method_3, number=10))
print('Method 4:', timeit.timeit(method_4, number=10))
print('Method 5:', timeit.timeit(method_5, number=10))
출력:
Method 1: 3.650640267
Method 2: 3.163998427
Method 3: 2.998530871
Method 4: 2.9918436889999995
Method 5: 3.2436501520000007
응용프로그램에서 가장 직관적이고 가장 쉽게 구현할 수 있는 방법을 사용하십시오.
판다를 사용해라.DataFrame.rename function.설명을 보려면 이 링크를 확인하십시오.
data.rename(columns = {'gdp': 'log(gdp)'}, inplace = True)
여러 열의 이름을 바꾸려면
data.rename(columns = {'gdp': 'log(gdp)', 'cap': 'log(cap)', ..}, inplace = True)
df.rename(columns=lambda x: {"My_sample": "My_sample_new_name"}.get(x, x))
ewe는 re—테이블을 다시 만들어 이름을 바꿀 수 있다.
df = pd.DataFrame()
column_names = mydataframe.columns
for i in range(len(mydataframe)):
column = mydataframe.iloc[:,i]
df[column_names[i][:-8]+"desigred_texnt"] = column
print(df.columns)
참조URL: https://stackoverflow.com/questions/19758364/rename-specific-columns-in-pandas
'Programing' 카테고리의 다른 글
Python 3에서 execile의 대안은 무엇인가? (0) | 2022.03.15 |
---|---|
'v-built' 지시어는 어떤 수식어도 지원하지 않는다. (0) | 2022.03.15 |
Python에서 사전 키를 목록으로 반환하는 방법? (0) | 2022.03.15 |
Laravel CORS with Fruitcake (0) | 2022.03.15 |
Android Phone에서 Resact Native 앱을 실행하는 방법 (0) | 2022.03.15 |