2016-10-23 3 views
0

나는 기본적으로 팬더 시리즈를 취한 후 처리 후 국가를 반환하는 find_country_from_connection_ip 기능을 가지고 있습니다.왜 DataFrame.apply()에서는 AttributeError가 발생하지만 개별 함수 호출에서는 AttributeError가 발생하지 않습니까?

내가하려는 것은 위의 함수의 반환 값으로 DataFrame에 새 열을 형성하는 것입니다.

dataframe_without_connection_ips['Country'] = 
      dataframe_without_connection_ips.apply(lambda x:find_country_from_connection_ip(x['Connection IP']), axis=1) 

하지만, 내가 점점 오전 오류는 다음과 같습니다 : 나의 시도는

AttributeError: ("'str' object has no attribute 'iloc'", u'occurred at index 303449')

그래서, 나의 이해는 오류 그래서 index 303449.에서 생성 될 수있다라고, 나는 함수를 호출하려고 그 특정한 색인에.

test_ip = dataframe_without_connection_ips[dataframe_without_connection_ips.index== 303449]['Connection IP'] 
find_country_from_connection_ip(test_ip) 

그리고, 놀랍게도 내가 오류없이 예상 출력 'United Kingdom'을 얻고있다.

여기 무슨 일입니까?

답변

0

함수가 행에 적용되는 방식에 따라 함수에 대한 입력은 string입니다. 그러나이 함수는이 작업이 있습니다.이 작업은 입력이 Series 또는 DataFrame 인 것으로 가정하는 것처럼 보입니다. 오류 메시지에 대한 설명입니다.

후속 테스트에서 실제로 함수에 대한 입력이 Series가되어 iloc 인덱싱이 실패하지 않는 이유가됩니다.

+0

알 겠지만,'ip.iloc [0]'은'else' 절에 있습니다. 인수'ip'가 문자열이 아니므로'result'는'False'로 평가됩니다. 그래서, 나는 이미 else 절에서 Series를 가져야한다는 경우를 처리했습니다. 내가 잘못? –

+0

''result''가 문자열 (예 : 외부 프로그램에서 조회를 일으키는 예기치 않은 IP 주소)이더라도 "False"로 평가되는 경우가 있습니까? –

관련 문제