source

팬더에서 기둥 이름 바꾸기

factcode 2022. 9. 14. 22:14
반응형

팬더에서 기둥 이름 바꾸기

Panda DataFrame의 컬럼 라벨을 변경하고 싶다.

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

로.

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

특정 열 이름 바꾸기

함수를 사용하여 이름을 변경할 열을 참조합니다.일부 열의 이름을 변경할 필요는 없습니다.

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 문서」를 참조해 주세요.


열 머리글 재할당

와 함께 사용axis=1 ★★★★★★★★★★★★★★★★★」inplace=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 in-place를 하여 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

에 할당하기만 하면 됩니다..columns★★★★

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

>>> df.columns = ['a', 'b']
>>> df
   a   b
0  1  10
1  2  20

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

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에서 열 이름 변경에 중요한 업데이트가 몇 가지 있습니다.

  • 메서드에 의해axis로 설정할 수 .columns ★★★★★★★★★★★★★★★★★」1이 업데이트를 통해 이 방법은 나머지 판다 API와 일치합니다. ★★★★★★★★★★★★★★★★」index ★★★★★★★★★★★★★★★★★」columns더 이상 사용하지 않아도 됩니다.
  • 를 사용하는 방법inplaceFalse모든 인덱스 또는 컬럼라벨의 이름을 목록으로 변경할 수 있습니다.

팬더 0.21+의 예

샘플 데이터 프레임 구성:

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

「」를 사용합니다.renameaxis='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로는 '''로 되어 있습니다.Trueinplace로는 「」가 .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.rename(columns={'$a': 'a', '$b': 'b', '$c': 'c', '$d': 'd', '$e': 'e'}, inplace=True)
df.columns = ['a', 'b', 'c', 'd', 'e']

기존 이름을 지정한 순서대로 지정한 이름으로 바꿉니다.

용도:

old_names = ['$a', '$b', '$c', '$d', '$e'] 
new_names = ['a', 'b', 'c', 'd', 'e']
df.rename(columns=dict(zip(old_names, new_names)), inplace=True)

수동으로 할 수 .new_names원하시는 대로.철자 오류, 악센트 수정, 특수 문자 삭제 등을 위해 몇 개의 열 이름만 변경해야 할 때 유용합니다.

단일 라인 또는 파이프라인 솔루션

다음 두 가지 사항에 초점을 맞춥니다.

  1. OP에 명시되어 있다

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

    하고 싶지 .'$'또는 각 열 헤더에서 첫 번째 문자를 제거합니다.OP를 사용하다대신 기존 시스템을 교체하는 데 주력하고 싶습니다.columns대체 열 이름 목록이 지정된 새 개체가 있는 개체입니다.

  2. df.columns = new서 ''는new새 열 이름 목록이 가장 간단하다는 것입니다.의 ""를 입니다.columns인라인으로 처리되지 않습니다.기존 데이터 프레임을 편집하지 않고 파이프라이닝을 통해 이를 수행할 수 있는 몇 가지 방법을 보여 줍니다.


1 업 11
해야 할 프레임을 df첫 번째 열 이름과 관련이 없는 새 열 이름을 사용합니다.

df = pd.DataFrame({'Jack': [1, 2], 'Mahesh': [3, 4], 'Xin': [5, 6]})
new = ['x098', 'y765', 'z432']

df

   Jack  Mahesh  Xin
0     1       3    5
1     2       4    6

솔루션 1
pd.DataFrame.rename

이전 열 이름을 새 열 이름으로 매핑하는 사전이 있으면 다음을 사용할 수 있다고 이미 알려져 있습니다.pd.DataFrame.rename.

d = {'Jack': 'x098', 'Mahesh': 'y765', 'Xin': 'z432'}
df.rename(columns=d)

   x098  y765  z432
0     1     3     5
1     2     4     6

그 을 쉽게 만, 그, 그, 에, 에, 에, 에에 대한 호출에 넣을 수 .rename를 이용할 때 다음과 같은 장점을 가지고 df열 , , , , , , , 이랬습니다.

# Given just a list of new column names
df.rename(columns=dict(zip(df, new)))

   x098  y765  z432
0     1     3     5
1     2     4     6

이 방법은 원래 열 이름이 고유할 경우 매우 효과적입니다.하지만 그렇지 않으면, 이것은 고장납니다.


2 업 22
(일치하지 않은 컬럼)

df = pd.DataFrame(
    [[1, 3, 5], [2, 4, 6]],
    columns=['Mahesh', 'Mahesh', 'Xin']
)
new = ['x098', 'y765', 'z432']

df

   Mahesh  Mahesh  Xin
0       1       3    5
1       2       4    6

2 ★★★★★★2
pd.concat 사용방법keys가 바뀌다

먼저 솔루션 1을 사용하려고 하면 어떤 일이 일어나는지 주목해 주십시오.

df.rename(columns=dict(zip(df, new)))

   y765  y765  z432
0     1     3     5
1     2     4     6

짰어요.new을 사용하다우리는 우리는결국 반복하게 되었다를 반복하게 되었다.y765. 그 대신에, 우리들은 그 대신에,그 대신에, 사용할 수 있다.keys그 의 논거의 주장pd.concat기능는 동안열을 반복하면서 기능하다의 기둥을 반복하는 데 사용하다.df.

pd.concat([c for _, c in df.items()], axis=1, keys=new) 

   x098  y765  z432
0     1     3     5
1     2     4     6

붕괴 3솔루션 3
재 작성하다..만약 당신이경우에만 사용해야 합니다 있는 싱글이 단일 이 기능은다 재구축하다. 이 만 사용되어야 한다.dtype모든 열.모든 컬럼에 대해.그렇지 않으면, 그렇지 않으면, 결국엔을 마치겠습니다...dtype object모든 열과 다시 변환을 사전 작업이 필요하다모든 열에 대해 다시 변환하려면 사전 작업이 더 필요합니다.

단일 싱글dtype

pd.DataFrame(df.values, df.index, new)

   x098  y765  z432
0     1     3     5
1     2     4     6

혼합 혼재dtype

pd.DataFrame(df.values, df.index, new).astype(dict(zip(new, df.dtypes)))

   x098  y765  z432
0     1     3     5
1     2     4     6

붕괴 4솔루션 4
이것은 술책을 담은 허튼 수작을 부리다이것은 에교묘한 속임수이다 대한.transpose ★★★★★★★★★★★★★★★★★」set_index.에서는 인덱스를 인라인으로 설정할 수 있지만 대응하는 것은 없습니다.set_columns그 다음에 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아.set_index. , 하다 같은 「」, 「」는, "dtypedtype3번지

★★dtype

df.T.set_index(np.asarray(new)).T

   x098  y765  z432
0     1     3     5
1     2     4     6

★★dtype

df.T.set_index(np.asarray(new)).T.astype(dict(zip(new, df.dtypes)))

   x098  y765  z432
0     1     3     5
1     2     4     6

5 ★★★★★★★ 5
사용하다lambdapd.DataFrame.rename의 각 합니다.new.
이 솔루션에서, 우리는 람다를 건네주고x무시해 버려요.요.y기대는 안 해.대신되며, 이을 사용하여 신, 폴, 폴, 을, 을, 을의 한 할 수 .x empty.month.mpti.

df.rename(columns=lambda x, y=iter(new): next(y))

   x098  y765  z432
0     1     3     5
1     2     4     6

그리고 sopython 채팅에서 사람들이 지적한 것처럼, 만약 내가 한 말을 더한다면*x ★★★★★★★★★★★★★★★★★」y내 , , , 을 보호할 수 있습니다.y 에서는 보호가 하지만, 이 문맥에서는 보호할 필요가 없다고 생각합니다.을 사용하다

df.rename(columns=lambda x, *, y=iter(new): next(y))

   x098  y765  z432
0     1     3     5
1     2     4     6

열 이름 vs 시리즈 이름

이면에서 일어나는 일을 조금 설명하겠습니다.

데이터 프레임은 일련의 시리즈입니다.

가 「」의 입니다.numpy.array.

numpy.array..name.

이게 시리즈의 이름입니다.판다들이 이 속성을 존중하는 경우는 드물지만, 군데군데 남아있어 판다들의 행동을 해킹하는데 사용될 수 있다.

열 목록 이름 지정

이 '요?df.columns list 그것은Series '은 '이것'이 있고,.name여하하다

.Series:

df.columns = ['column_one', 'column_two']
df.columns.names = ['name of the list of columns']
df.index.names = ['name of the index']

name of the list of columns     column_one  column_two
name of the index
0                                    4           1
1                                    5           2
2                                    6           3

인덱스의 이름은 항상 한 열 아래에 있습니다.

오래가는 유물

.name속성이 남아있을 수 있습니다.「 」를 설정했을 df.columns = ['one', 'two'] df.one.name 되다'one'.

「 」를 설정했을 df.one.name = 'three'df.columns 줄 수 있다['one', 'two'] , , , , 입니다.df.one.name 드립니다.'three'.

그렇지만

pd.DataFrame(df.one)

    three
0       1
1       2
2       3

팬더들이 재활용을 하기 때문에.name되어 있는 「」의 「」를 참조해 주세요.Series.

다중 수준 열 이름

판다는 여러 층으로 된 기둥 이름을 짓는 방법을 가지고 있다.마법은 별로 없지만, 아무도 눈치채지 못하는 것 같아서 대답에 이 부분을 포함시키고 싶었습니다.

    |one            |
    |one      |two  |
0   |  4      |  1  |
1   |  5      |  2  |
2   |  6      |  3  |

이것은 다음과 같이 열을 목록으로 설정하면 쉽게 달성할 수 있습니다.

df.columns = [['one', 'one'], ['one', 'two']]

간단한 예시로 이름 변경에 대해 설명하겠습니다.

  1. 매핑을 사용하여 열 이름 바꾸기:

     df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) # Creating a df with column name A and B
     df.rename({"A": "new_a", "B": "new_b"}, axis='columns', inplace =True) # Renaming column A with 'new_a' and B with 'new_b'
    
     Output:
    
        new_a  new_b
     0  1       4
     1  2       5
     2  3       6
    
  2. 매핑을 사용하여 인덱스/Row_Name 이름 바꾸기:

     df.rename({0: "x", 1: "y", 2: "z"}, axis='index', inplace =True) # Row name are getting replaced by 'x', 'y', and 'z'.
    
     Output:
    
            new_a  new_b
         x  1       4
         y  2       5
         z  3       6
    

데이터 세트 이름이 df이고 df가 있다고 가정합니다.

df = ['$a', '$b', '$c', '$d', '$e']`

따라서 이름을 바꾸려면 다음과 같이 해야 합니다.

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

이게 데이터 프레임이라고 칩시다.

여기에 이미지 설명 입력

두 가지 방법을 사용하여 열의 이름을 변경할 수 있습니다.

  1. 「」를 사용합니다.dataframe.columns=[#list]

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

    여기에 이미지 설명 입력

    이 방법의 제한은 하나의 열을 변경해야 할 경우 전체 열 목록을 전달해야 한다는 것입니다.또한 이 방법은 인덱스 라벨에는 적용되지 않습니다.예를 들어, 다음을 통과했을 경우:

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

    그러면 오류가 발생합니다.길이 불일치: 예상 축에 5개의 요소가 있고 새 값에 4개의 요소가 있습니다.

  2. 이다.rename(), 또는 행

    df = df.rename(columns={'$a':'a'})
    

    여기에 이미지 설명 입력

마찬가지로 행이나 열을 변경할 수 있습니다.

팬더 기능의 대부분은 inplace 파라미터를 가지고 있습니다.True 를 설정하면 변환은 호출하고 있는 데이터 프레임에 직접 적용됩니다.예를 들어 다음과 같습니다.

df = pd.DataFrame({'$a':[1,2], '$b': [3,4]})
df.rename(columns={'$a': 'a'}, inplace=True)
df.columns

>>> Index(['a', '$b'], dtype='object')

또는 원래 데이터 프레임을 보존하는 경우도 있습니다.데이터 프레임의 작성에 비용이 많이 드는 작업이라면, 이 케이스에 빠지는 것을 자주 봐 왔습니다.예를 들어, 데이터 프레임을 작성해야 하는 경우 Snowflake 데이터베이스를 쿼리합니다.이 경우 inplace 파라미터가 False로 설정되어 있는지 확인합니다.

df = pd.DataFrame({'$a':[1,2], '$b': [3,4]})
df2 = df.rename(columns={'$a': 'a'}, inplace=False)
df.columns
    
>>> Index(['$a', '$b'], dtype='object')

df2.columns

>>> Index(['a', '$b'], dtype='object')

이러한 유형의 변혁을 자주 수행하는 경우 다양한 판다 GUI 도구를 살펴볼 수도 있습니다.저는 미토라는 이름의 창조자입니다.편집한 내용을 파이썬 코드로 자동 변환하는 스프레드시트입니다.

데이터 프레임이 있는 경우 df.columns는 모든 데이터를 목록으로 덤프하여 데이터 프레임에 열 이름으로 재할당합니다.

columns = df.columns
columns = [row.replace("$", "") for row in columns]
df.rename(columns=dict(zip(columns, things)), inplace=True)
df.head() # To validate the output

최선의 방법?몰라.방법 - 네.

질문에 대한 답변에 제시된 모든 주요 기술을 평가하는 더 좋은 방법은 cProfile을 사용하여 메모리와 실행 시간을 측정하는 것입니다.@kadee, @kaitlyn, @eumiro의 각 함수는 실행시간이 가장 빨랐습니다.이 함수는 매우 빠릅니다만, 모든 답변에 대해 0.000초와 0.001초의 반올림을 비교하고 있습니다.도덕성: 위에 있는 내 대답은 아마도 '최고의' 방법이 아닐 것이다.

import pandas as pd
import cProfile, pstats, re

old_names = ['$a', '$b', '$c', '$d', '$e']
new_names = ['a', 'b', 'c', 'd', 'e']
col_dict = {'$a': 'a', '$b': 'b', '$c': 'c', '$d': 'd', '$e': 'e'}

df = pd.DataFrame({'$a':[1, 2], '$b': [10, 20], '$c': ['bleep', 'blorp'], '$d': [1, 2], '$e': ['texa$', '']})

df.head()

def eumiro(df, nn):
    df.columns = nn
    # This direct renaming approach is duplicated in methodology in several other answers:
    return df

def lexual1(df):
    return df.rename(columns=col_dict)

def lexual2(df, col_dict):
    return df.rename(columns=col_dict, inplace=True)

def Panda_Master_Hayden(df):
    return df.rename(columns=lambda x: x[1:], inplace=True)

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

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

def migloo(df, on, nn):
    return df.rename(columns=dict(zip(on, nn)), inplace=True)

def kadee(df):
    return df.columns.str.replace('$', '')

def awo(df):
    columns = df.columns
    columns = [row.replace("$", "") for row in columns]
    return df.rename(columns=dict(zip(columns, '')), inplace=True)

def kaitlyn(df):
    df.columns = [col.strip('$') for col in df.columns]
    return df

print 'eumiro'
cProfile.run('eumiro(df, new_names)')
print 'lexual1'
cProfile.run('lexual1(df)')
print 'lexual2'
cProfile.run('lexual2(df, col_dict)')
print 'andy hayden'
cProfile.run('Panda_Master_Hayden(df)')
print 'paulo1'
cProfile.run('paulo1(df)')
print 'paulo2'
cProfile.run('paulo2(df)')
print 'migloo'
cProfile.run('migloo(df, old_names, new_names)')
print 'kadee'
cProfile.run('kadee(df)')
print 'awo'
cProfile.run('awo(df)')
print 'kaitlyn'
cProfile.run('kaitlyn(df)')
df.rename(index=str, columns={'A':'a', 'B':'b'})

panda.DataFrame.rename

df = pd.DataFrame({'$a': [1], '$b': [1], '$c': [1], '$d': [1], '$e': [1]})

새 열 목록이 기존 열과 같은 순서일 경우 할당은 간단합니다.

new_cols = ['a', 'b', 'c', 'd', 'e']
df.columns = new_cols
>>> df
   a  b  c  d  e
0  1  1  1  1  1

이전 열 이름을 새 열 이름으로 입력한 사전이 있는 경우 다음을 수행할 수 있습니다.

d = {'$a': 'a', '$b': 'b', '$c': 'c', '$d': 'd', '$e': 'e'}
df.columns = df.columns.map(lambda col: d[col])  # Or `.map(d.get)` as pointed out by @PiRSquared.
>>> df
   a  b  c  d  e
0  1  1  1  1  1

매핑이의 지도는 됩니다.$" " " 록록를록해를 。

df.columns = [col[1:] if col[0] == '$' else col for col in df]

새 열 이름에 대한 목록이 이미 있는 경우 다음을 시도할 수 있습니다.

new_cols = ['a', 'b', 'c', 'd', 'e']
new_names_map = {df.columns[i]:new_cols[i] for i in range(len(new_cols))}

df.rename(new_names_map, axis=1, inplace=True)

원래 열 라벨을 대체할 수 있는 또 다른 방법은 원래 열 라벨에서 불필요한 문자(여기서 '$')를 제거하는 것입니다.

이것은 df.columns 위에 for 루프를 실행하고 제거된 열을 df.columns에 추가하는 것으로 실행할 수 있습니다.

대신, 다음과 같은 목록 이해를 사용하여 하나의 문장으로 깔끔하게 이 작업을 수행할 수 있습니다.

df.columns = [col.strip('$') for col in df.columns]

)stripPython 메서드).

정말 간단해요.사용방법:

df.columns = ['Name1', 'Name2', 'Name3'...]

입력한 순서대로 열 이름이 할당됩니다.

# This way it will work
import pandas as pd

# Define a dictionary 
rankings = {'test': ['a'],
        'odi': ['E'],
        't20': ['P']}

# Convert the dictionary into DataFrame
rankings_pd = pd.DataFrame(rankings)

# Before renaming the columns
print(rankings_pd)

rankings_pd.rename(columns = {'test':'TEST'}, inplace = True)

다음과 같이 사용할 수 있습니다.

df.columns = df.columns.str.slice(1)

다른 옵션은 정규 표현을 사용하여 이름을 변경하는 것입니다.

import pandas as pd
import re

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

df = df.rename(columns=lambda x: re.sub('\$','',x))
>>> df
   a  b  c
0  1  3  5
1  2  4  6

는 my method를 할 수 입니다.delimiters=이치노

작업 코드:

import pandas as pd
import re


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

delimiters = '$'
matchPattern = '|'.join(map(re.escape, delimiters))
df.columns = [re.split(matchPattern, i)[1] for i in df.columns ]

출력:

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

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

이전 답변의 접근 방식은 MultiIndex에서는 작동하지 않습니다.MultiIndex의 경우 다음과 같은 작업을 수행해야 합니다.

>>> df = pd.DataFrame({('$a','$x'):[1,2], ('$b','$y'): [3,4], ('e','f'):[5,6]})
>>> df
   $a $b  e
   $x $y  f
0  1  3  5
1  2  4  6
>>> rename = {('$a','$x'):('a','x'), ('$b','$y'):('b','y')}
>>> df.columns = pandas.MultiIndex.from_tuples([
        rename.get(item, item) for item in df.columns.tolist()])
>>> df
   a  b  e
   x  y  f
0  1  3  5
1  2  4  6

공급 시스템에 의해 명명된 컬럼의 하중을 제어할 수 없는 경우 일반적인 접근과 특정 대체를 한 번에 조합한 다음과 같은 접근방식을 생각해 냈습니다.

먼저 정규 표현을 사용하여 데이터 프레임 열 이름에서 사전을 생성하여 열 이름의 특정 부록을 삭제한 후 사전에 특정 대체를 추가하여 수신 데이터베이스에서 예상대로 코어 열의 이름을 지정합니다.

그 후, 이것은 한 번에 데이터 프레임에 적용됩니다.

dict = dict(zip(df.columns, df.columns.str.replace('(:S$|:C1$|:L$|:D$|\.Serial:L$)', '')))
dict['brand_timeseries:C1'] = 'BTS'
dict['respid:L'] = 'RespID'
dict['country:C1'] = 'CountryID'
dict['pim1:D'] = 'pim_actual'
df.rename(columns=dict, inplace=True)

'$' 기호를 제거하려면 아래 코드를 사용하십시오.

df.columns = pd.Series(df.columns.str.replace("$", ""))

이미 제공된 솔루션 외에 파일을 읽는 동안 모든 열을 바꿀 수 있습니다. 하면 됩니다.names ★★★★★★★★★★★★★★★★★」header=0네, 그렇습니다.

먼저 열 이름으로 사용할 이름 목록을 만듭니다.

import pandas as pd

ufo_cols = ['city', 'color reported', 'shape reported', 'state', 'time']
ufo.columns = ufo_cols

ufo = pd.read_csv('link to the file you are using', names = ufo_cols, header = 0)

이 경우 모든 열 이름이 목록에 있는 이름으로 바뀝니다.

다음은 타이핑을 줄이기 위해 사용하고 싶은 작은 기능입니다.

def rename(data, oldnames, newname):
    if type(oldnames) == str: # Input can be a string or list of strings
        oldnames = [oldnames] # When renaming multiple columns
        newname = [newname] # Make sure you pass the corresponding list of new names
    i = 0
    for name in oldnames:
        oldvar = [c for c in data.columns if name in c]
        if len(oldvar) == 0:
            raise ValueError("Sorry, couldn't find that column in the dataset")
        if len(oldvar) > 1: # Doesn't have to be an exact match
            print("Found multiple columns that matched " + str(name) + ": ")
            for c in oldvar:
                print(str(oldvar.index(c)) + ": " + str(c))
            ind = input('Please enter the index of the column you would like to rename: ')
            oldvar = oldvar[int(ind)]
        if len(oldvar) == 1:
            oldvar = oldvar[0]
        data = data.rename(columns = {oldvar : newname[i]})
        i += 1
    return data

다음은 동작의 예를 제시하겠습니다.

In [2]: df = pd.DataFrame(np.random.randint(0, 10, size=(10, 4)), columns = ['col1', 'col2', 'omg', 'idk'])
# First list = existing variables
# Second list = new names for those variables
In [3]: df = rename(df, ['col', 'omg'],['first', 'ohmy'])
Found multiple columns that matched col:
0: col1
1: col2

Please enter the index of the column you would like to rename: 0

In [4]: df.columns
Out[5]: Index(['first', 'col2', 'ohmy', 'idk'], dtype='object')

언급URL : https://stackoverflow.com/questions/11346283/renaming-column-names-in-pandas

반응형