2017-11-28 2 views
0

이름을으로 변경하여 팬더 데이터 프레임의 열 이름을 바꾸고 싶습니다. 따라서 이름 (문자열)을 분할하고 싶습니다. 문자열 내의 대문자로 예를 들어, 내 열 이름은 'FooBar'또는 'SpamEggs'이고 한 열은 'Monty-Python'입니다. 내 목표는 'foo_bar', 'spam_eggs', 'monty_python'과 같은 열 이름입니다. 파이썬 : (열 이름의 이름 바꾸기의 일부로) 대문자로 문자열 분할

df.rename(columns=lambda x: x.strip().lower().replace("-", "_"), inplace=True) 

이 ( 스트립을 사이에 가야한다 :

나는

'-'.join(re.findall('[A-Z][a-z]*', 'FooBar')) 

나에게 Foo-Bar

을 줄 것이라는 점을 알고있다하지만 내 이름을 변경 기능에 포함 할 수 없습니다 lower하지만 구문 오류가 다시 나타납니다.

사람이 에 조각이의 이름을 바꾸거나 나를 findall은 아닌 다른 해결책을 찾을 수 있도록 포함하는 데 도움이 수 있습니까?

+0

이름 바꾸기 기능을 포함하는'def rename (name)'함수를 만들어서 람다에 모두 넣는 것이 더 쉽습니다. 그런 다음'df.rename (columns = rename, inplace = True)'를 할 수 있습니다. 이렇게하면 변형이 더 간단 해지고 코드를 더 쉽게 읽을 수 있습니다. –

답변

1
  1. 편지
  2. 되지 않는다는 것을 제거 앞에 추가 문자열
  3. 소문자 결과
df.columns 
Index(['FooBar', 'SpamEggs', 'Monty-Python'], dtype='object') 

df.columns.str.replace('[\W]', '')\ 
      .str.replace('(?<!^)([A-Z])', r'_\1')\ 
      .str.lower() 
Index(['foo_bar', 'spam_eggs', 'monty_python'], dtype='object') 
의 시작에없는 대문자에 밑줄 ( _)

이 솔루션은 매우 정교합니다. 결과를 df.columns에 다시 할당하십시오.

+0

오, 오, 정규식의 왕, 그것은 매력처럼 일했습니다! 고맙습니다! – JuKo