각 열 이름에 접미사 (또는 접두사)를 추가하는 방법은 무엇입니까?


88

다음 _x과 같이 각 열 이름 에 접미사 를 추가하고 싶습니다 .

featuresA = myPandasDataFrame.columns.values + '_x'

어떻게해야합니까? 또한 x_접미사 로 추가 하려면 솔루션이 어떻게 변경됩니까?

답변:


120

list이해력을 사용할 수 있습니다 .

df.columns = [str(col) + '_x' for col in df.columns]

또한 같은 방법 내장되어 .add_suffix().add_prefix()같은 다른 대답에 언급했다.


이것은 가장 단순하고 우아한 대답입니다!
진화 왕

163

다음은 내 생각에 접미사를 추가하는 가장 좋은 방법입니다.

df = df.add_suffix('_some_suffix')

DataFrame에서 호출되고 DataFrame을 반환하는 함수이므로 호출 체인에서 사용할 수 있습니다.


14
이름에 접두사를 추가하려는 경우 add_prefix를 사용할 수 있습니다.
Jorge

9
안타깝게도 이것은 변경할 수 없습니다 (즉, inplace=True매개 변수 옵션이 없음). 그렇지 않으면 완벽합니다.
ijoseph 2017

나는 이것이 어떤 상황에서 받아 들여진 대답보다 낫다고 생각한다. 왜냐하면 그것은 자체적 인 서술이 필요하지 않고 하나의 서술문에서 일련의 연산에서 사용될 수 있기 때문이다.
Captain Lepton 19

@CaptainLepton 때 하지 않을 이 답변이 더 허용 대답보다
baxx

1
접미사가 상수가 아닌 경우. 제목은 접미사에 대해 설명합니다. 게시물은 범위를 하나의 상수 접미사로 좁히지 만 일반적인 용어로 게시물 제목에 대답하는 경우 목록 이해 또는 기타 반복 가능을 통해 열을 설정하는 것이 더 유연합니다
Captain Lepton

17

우아한 내부 연결

df제자리에서 수정하려는 경우 가장 저렴한 (가장 간단한) 옵션은 제자리에 직접 추가하는 것입니다 df.columns(예 : 사용 Index.__iadd__).

df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]})
df

   A   B
0  9  12
1  4   7
2  2   5
3  1   4

df.columns += '_some_suffix'
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

접두사를 추가하려면 유사하게

df.columns = 'some_prefix_' + df.columns
df

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

또 다른 저렴한 옵션은 f-string형식화 (python3.6 +에서 사용 가능) 와 함께 목록 이해를 사용하는 것 입니다.

df.columns = [f'{c}_some_suffix' for c in df]
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

접두사도 마찬가지로

df.columns = [f'some_prefix{c}' for c in df]

메서드 체이닝

메소드 체이닝 중에 * fix를 추가하는 것도 가능합니다. 접미사를 추가하려면DataFrame.add_suffix

df.add_suffix('_some_suffix')

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

이것은 데이터 의 복사본 을 반환합니다 . IOW df는 수정되지 않습니다.

접두사 추가도 DataFrame.add_prefix.

df.add_prefix('some_prefix_')

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

또한 수정하지 않습니다 df.


비판 add_*fix

메서드 체인을 수행하려는 경우 다음은 좋은 방법입니다.

df.some_method1().some_method2().add_*fix(...)

그러나 add_prefix(및 add_suffix) 헤더를 수정하기 위해 전체 데이터 프레임 의 복사본을 만듭니다 . 이것이 낭비라고 생각하지만 여전히 연결하고 싶다면 다음을 호출 할 수 있습니다 pipe.

def add_suffix(df):
    df.columns += '_some_suffix'
    return df

df.some_method1().some_method2().pipe(add_suffix)

이것은 우아합니다! 열의 하위 집합에 접두사 또는 접미사를 추가하려는 경우 (예 : 이름 에 모든 열 대신 new또는 같은 공통 단어 (예 : 또는 old)가 포함 된 열)? 감사.
Bowen Liu

1
@BowenLiu 대신 df.rename ()을 사용하는 것이 좋습니다 ... 사전 매핑 이름을 새 이름으로 전달합니다. 그런 다음 axis = 1로 rename을 호출하십시오. 조건부 목록 이해력 할당을 사용할 수도 있습니다.
cs95

열 이름으로 일반 데이터 유형에서만 작동하며 열이 예를 들어 df = pd.DataFrame([[1,2,3]]*10)-> 와 같은 RangeIndex 인 경우 df.columns에는 다음을 사용합니다.df.add_suffix('_x')
Lorenz

df.columns = df.columns.astype(str) + '_x' 내 첫 번째 방법이 보여주는 것처럼 할 수 있습니다 .
cs95

4

위에서 제안한이 솔루션을 보지 못 했으므로 목록에 추가합니다.

df.columns += '_x'

그리고 접두사 시나리오에 쉽게 적응할 수 있습니다.


물론 접두사로 사용할 수는 없지만 접미사에 대한 최상의 솔루션입니다.
Lorenz

열 이름의 일반 데이터 유형에서만 작동하며 열이 예를 들어 df = pd.DataFrame([[1,2,3]]*10)-> 와 같은 RangeIndex 인 경우 df.columns에는 다음을 사용합니다.df.add_suffix('_x')
Lorenz

1

열 이름에 접미사 (또는 접두사)를 추가하는 4 가지 방법을 알고 있습니다.

1- df.columns = [str(col) + '_some_suffix' for col in df.columns]

또는

2- df.rename(columns= lambda col: col+'_some_suffix')

또는

3- df.columns += '_some_suffix'훨씬 더 쉽습니다.

또는 가장 좋은 :

삼- df.add_suffix('_some_suffix')


0

사용 DataFrame.rename.

add_prefix및 지원 중단add_suffix

팬더의 미래 버전에서 add_prefixadd_suffix됩니다 되지 않습니다 . 새로운 권장 방법은 다음을 사용하는 것입니다 DataFrame.rename.

df = pd.DataFrame({'A': range(3), 'B': range(4, 7)})
print(df)
   A  B
0  0  4
1  1  5
2  2  6

사용 rename하여 axis=1문자열 서식 :

df.rename('col_{}'.format, axis=1)
# or df.rename(columns='col_{}'.format)

   col_A  col_B
0      0      4
1      1      5
2      2      6

실제로 열 이름을 덮어 쓰려면 반환 된 값을 다음에 할당 할 수 있습니다 df.

df = df.rename('col_{}'.format, axis=1)

또는 사용 inplace=True:

df.rename('col_{}'.format, axis=1, inplace=True)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.