새로운 Series 를 만들고 데이터프레임에 추가하기
Series.apply의 인수로 lambda 함수를 사용해서 새로운 Series 를 만들고 데이터프레임에 추가하기
실습링크 :https://colab.research.google.com/notebooks/mlcc/intro_to_pandas.ipynb?hl=ko
https://developers.google.com/machine-learning/crash-course/
구글에서는 머신러닝 단기집중과정이라는 온라인 머신러닝 학습시스템을 제공하고 있습니다.
얼마 전에 한국어로 번역이 되었고 한국인 엔지니어가 감수를 했다고 해서 이 과정을 진행해 보니 머신러닝을 배우기에 좋은 콘텐츠라서 이 과정을 소개해 봅니다.
또 이 과정의 번역은 머신러닝 기술을 사용했다고해서 더 의미가 있는데요, 혼자 공부하면 지루하니 같이 이렇게 온라인상으로 나마 공부해 볼까 합니다.
이번 비디오에서는 Series.apply의 인수로 lambda 함수를 사용해서 새로운 Series 를 만들고 데이터프레임에 추가하기를 해봅니다.
데이터 조작
Python의 기본 산술 연산을 Series
에 적용할 수도 있습니다. 예를 들면 다음과 같습니다.
population / 1000.
NumPy는 유명한 계산과학 툴킷입니다. Pandas Series
는 대부분의 NumPy 함수에 인수로 사용할 수 있습니다.
import numpy as np
np.log(population)
더 복잡한 단일 열 변환에는 Series.apply
를 사용할 수 있습니다. Python map 함수처럼,
Series.apply
는 인수로 lambda 함수를 허용하며, 이는 각 값에 적용됩니다.
아래의 예에서는 인구
가 백만 명을 초과하는지 나타내는 새 Series
를 만듭니다.
population.apply(lambda val: val > 1000000)
DataFrames
수정 역시 간단합니다. 예를 들어 다음 코드는 기존 DataFrame
에 두 개의 Series
를 추가합니다.
cities['Area square miles'] = pd.Series([46.87, 176.53, 97.92])
cities['Population density'] = cities['Population'] / cities['Area square miles']
cities
실습 #1
다음 두 명제 모두 True인 경우에만 True인 새 부울 열을 추가하여 도시
테이블을 수정합니다.
- 도시 이름은 성인의 이름을 본따서 지었다.
- 도시 면적이 130제곱킬로미터보다 넓다.
참고: 부울 Series
는 기존 부울 연산자가 아닌 비트 연산자를 사용하여 결합할 수 있습니다. 예를 들어 logical and를 실행할 때 and
대신 &
를 사용합니다.
참고: 스페인어에서 "San"은 "성인"의 의미입니다.
# Your code here
해결 방법
해결 방법을 보려면 아래를 클릭하세요.
cities['Is wide and has saint name'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San'))
cities
색인
Series
와 DataFrame
객체 모두 식별자 값을 각 Series
항목이나 DataFrame
행에 할당하는 index
속성을 정의합니다.
기본적으로 생성 시 Pandas는 소스 데이터의 순서를 나타내는 색인 값을 할당합니다. 생성된 이후 색인 값은 고정됩니다. 즉, 데이터의 순서가 재정렬될 때 변하지 않습니다.
city_names.index
cities.index
DataFrame.reindex
를 호출하여 수동으로 행의 순서를 재정렬합니다. 예를 들어 다음은 도시 이름을 기준으로 분류하는 것과 효과가 같습니다.
cities.reindex([2, 0, 1])
색인 재생성은 DataFrame
을 섞기(임의 설정하기) 위한 좋은 방법입니다. 아래의 예에서는 배열처럼 된 색인을 NumPy의 random.permutation
함수에 전달하여 값을 섞습니다. 이렇게 섞인 배열로 reindex
를 호출하면 DataFrame
행도 같은 방식으로 섞입니다.
다음 셀을 여러 번 실행해 보세요.
cities.reindex(np.random.permutation(cities.index))
자세한 정보는 색인 문서를 참조하세요.
실습 #2
reindex
메서드는 원래 DataFrame
의 색인 값에 없는 색인 값을 허용합니다. 메서드를 실행해보고 이런 값을 사용하면 어떤 결과가 나오는지 확인해보세요. 왜 이런 값이 허용된다고 생각하나요?
# Your code here
해결 방법
해결 방법을 보려면 아래를 클릭하세요.
reindex
입력 배열에 원래 DataFrame
색인 값에 없는 값을 포함하면 reindex
가 이 \'누락된\' 색인에 새 행을 추가하고 모든 해당 열을 NaN
값으로 채웁니다.
cities.reindex([0, 4, 5, 2])
색인은 보통 실제 데이터에서 가져온 문자열이기 때문에 이 동작이 바람직합니다(Pandas 색인 재생성 문서에서 색인 값이 브라우저 이름인 예제 참조).
이 경우 \'누락된\' 색인을 허용하면 외부 목록을 사용하여 쉽게 색인을 다시 생성할 수 있으므로, 입력 처리에 대해 걱정하지 않아도 됩니다.