Programing

팬더에서 특정 열 이름 바꾸기

c10106 2022. 3. 15. 20:28
반응형

팬더에서 특정 열 이름 바꾸기

'데이터프레임'이 있는데data단일 열 머리글의 이름을 변경하려면 어떻게 해야 하는가?예를 들면gdplog(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.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

와 유사하다.replacepython, 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.replaceregex 지원(기본적으로 활성화됨)자세한 내용은 문서를 참조하십시오.


목록 전달 대상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 ZA2 M2 N2 Z2열로 된 데이터 틀에서.AZ100만 행을 포함하는

# 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

반응형