2017-09-11 4 views
0

열 이름을 정리하기 위해 각 DataFrames에 적용 할 수있는 함수를 만들고 싶습니다. 예를 들어함수를 사용하여 팬더 DataFrame 열 이름 수정하기

:

def standardize_headers(df): 
    return df.columns.str.replace(' ', '_').str.lower() 

는 그러나, 나는이 코드를 사용하여 적용 할 때 :

AttributeError: ("'Series' object has no attribute 'columns'", u'occurred at index External_Code') 

'External_Code'는 첫 번째 열입니다 :

df2 = df.apply(standardize_headers) 

을 나는 오류 df에 이 간단한 예제를 람다 함수로 처리 할 수 ​​있다는 것을 알고 있지만 여러 단계로 더 복잡한 함수를 사용할 계획이므로 사용자 정의 함수에서 열 이름을 참조 할 수 있어야합니다. 나는 적용이 그 대상을 시리즈로 취급한다는 것을 안다. 그렇다면 사용자 정의 함수 내에서 열을 어떻게 참조 할 수 있습니까? 또는 문제는 내가 DataFrame 함수를 적용하는 방식입니다.

+1

'df'샘플을 추가 할 수 있습니까? 그래서 우리는 당신이 받고있는 오류를 재현 할 수 있습니다. – Dark

답변

0

대신을 시도해보십시오

def standardize_headers(df, func=None): 
    df.columns = df.columns.str.replace(' ', '_').str.lower() 
    if func: 
     df = df.apply(func) 
    return df 

df2 = standardize_headers(df) 

당신도 단순히 이름 DataFrame을 반환하려면이 템플릿을 확장 할 수 있습니다, 또는 그것을 반환하기 전에 DataFrame에 적용 할 다양한 기능을 전달합니다.

+0

이 기능이 작동하고 내 더 복잡한 기능에서도 작동합니다. 감사합니다 – Amber

+0

Downvoted. 컬럼 이름을 변경하는 관용적 인 방법이 있으며, 복잡한 이름 바꾸기를 수행하는 함수를 전달할 수있는'rename' 메소드를 사용합니다. –

+0

@TedPetrou, 확실히,이 경우에는'rename'이 작동합니다 ('inplace' 할당이 주된 이점입니다).하지만 그것은 근본적인 질문이 아니라 세부 사항입니다. 마지막 단락을 읽으십시오. OP는 후속 DF 작업에서 이름이 바뀐 열을 사용하기 전에 함수 내에서 열 이름을 변경하는 방법을 요청했습니다. – cmaher

0

간단한 방법은 rename 방법을 사용하는 것입니다. columns 매개 변수에 함수를 전달할 수 있으며이 함수는 각 열 이름에 적용됩니다. 이 함수의 x은 문자열이므로 직접 문자열 메서드를 사용할 수 있습니다.

def standardize_headers(x): 
    return x.replace(' ', '_').lower() 

df.rename(columns=standardize_headers) 

apply 함수는 각 열의 값을 Series로 직접 사용합니다.

+0

질문에서, 나는 이것이 람다 함수로 작용했다고 말했다. 하지만 좀 더 복잡하게 만들고 싶었 기 때문에 사용자 정의 함수가 필요했습니다. – Amber

+0

그냥 사용자 정의 함수로 만듭니다. 다른 대답은별로 좋지 않습니다. –

+0

'inplace = True'를 추가하거나'df'에 다시 할당하려고합니다. – cmaher