팬더에서 기둥 이름 바꾸기
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
더 이상 사용하지 않아도 됩니다. - 를 사용하는 방법
inplace
로False
모든 인덱스 또는 컬럼라벨의 이름을 목록으로 변경할 수 있습니다.
팬더 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
「」를 사용합니다.rename
axis='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
로는 '''로 되어 있습니다.True
inplace
로는 「」가 .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
원하시는 대로.철자 오류, 악센트 수정, 특수 문자 삭제 등을 위해 몇 개의 열 이름만 변경해야 할 때 유용합니다.
단일 라인 또는 파이프라인 솔루션
다음 두 가지 사항에 초점을 맞춥니다.
OP에 명시되어 있다
편집한 열 이름을 목록에 저장했지만 열 이름을 바꾸는 방법을 알 수 없습니다.
하고 싶지 .
'$'
또는 각 열 헤더에서 첫 번째 문자를 제거합니다.OP를 사용하다대신 기존 시스템을 교체하는 데 주력하고 싶습니다.columns
대체 열 이름 목록이 지정된 새 개체가 있는 개체입니다.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
. , 하다 같은 「」, 「」는, "dtype
dtype
3번지
★★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
사용하다lambda
pd.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']]
간단한 예시로 이름 변경에 대해 설명하겠습니다.
매핑을 사용하여 열 이름 바꾸기:
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
매핑을 사용하여 인덱스/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']
이게 데이터 프레임이라고 칩시다.
두 가지 방법을 사용하여 열의 이름을 변경할 수 있습니다.
「」를 사용합니다.
dataframe.columns=[#list]
df.columns=['a','b','c','d','e']
이 방법의 제한은 하나의 열을 변경해야 할 경우 전체 열 목록을 전달해야 한다는 것입니다.또한 이 방법은 인덱스 라벨에는 적용되지 않습니다.예를 들어, 다음을 통과했을 경우:
df.columns = ['a','b','c','d']
그러면 오류가 발생합니다.길이 불일치: 예상 축에 5개의 요소가 있고 새 값에 4개의 요소가 있습니다.
이다.
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'})
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]
)strip
Python 메서드).
정말 간단해요.사용방법:
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
'source' 카테고리의 다른 글
MySQL로 대용량 SQL 파일 가져오기 (0) | 2022.09.14 |
---|---|
요소가 존재할 때까지 함수를 대기시킵니다. (0) | 2022.09.14 |
WebView자원 요청에 커스텀헤더 추가 - Android (0) | 2022.09.14 |
MariaDB 날짜별 정렬 및 제한 오프셋 및 결측 결과 (0) | 2022.09.14 |
Mysql에서 int(10)의 최대 크기는 얼마입니까? (0) | 2022.09.14 |