In [0]:
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
학습 목표:
DataFrame
및 Series
데이터 구조에 관한 소개 확인하기DataFrame
및 Series
내의 데이터 액세스 및 조작DataFrame
으로 CSV 데이터 가져오기DataFrame
의 색인을 다시 생성하여 데이터 셔플Pandas는 열 중심 데이터 분석 API입니다. 입력 데이터를 처리하고 분석하는 데 효과적인 도구이며, 여러 ML 프레임워크에서도 Pandas 데이터 구조를 입력으로 지원합니다. Pandas API를 전체적으로 소개하려면 길어지겠지만 중요한 개념은 꽤 간단하므로 아래에서 소개하도록 하겠습니다. 전체 내용을 참조할 수 있도록 Pandas 문서 사이트에서 광범위한 문서와 여러 가이드를 제공하고 있습니다.
In [0]:
from __future__ import print_function
import pandas as pd
pd.__version__
Series
를 만드는 한 가지 방법은 Series
객체를 만드는 것입니다. 예를 들면 다음과 같습니다.
In [0]:
pd.Series(['San Francisco', 'San Jose', 'Sacramento'])
DataFrame
객체는 string
열 이름과 매핑되는 'dict'를 각각의 Series
에 전달하여 만들 수 있습니다. Series
의 길이가 일치하지 않는 경우, 누락된 값은 특수 NA/NaN 값으로 채워집니다. 예를 들면 다음과 같습니다.
In [0]:
city_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento'])
population = pd.Series([852469, 1015785, 485199])
pd.DataFrame({ 'City name': city_names, 'Population': population })
하지만 대부분의 경우 전체 파일을 DataFrame
으로 로드합니다. 다음 예는 캘리포니아 부동산 데이터가 있는 파일을 로드합니다. 다음 셀을 실행하여 데이터에 로드하고 기능 정의를 만들어 보세요.
In [0]:
california_housing_dataframe = pd.read_csv("https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv", sep=",")
california_housing_dataframe.describe()
위의 예에서는 DataFrame.describe
를 사용하여 DataFrame
에 관한 흥미로운 통계를 보여줍니다. 또 다른 유용한 함수는 DataFrame.head
로, DataFrame
레코드 중 처음 몇 개만 표시합니다.
In [0]:
california_housing_dataframe.head()
Pandas의 또 다른 강력한 기능은 그래핑입니다. 예를 들어 DataFrame.hist
를 사용하면 한 열에서 값의 분포를 빠르게 검토할 수 있습니다.
In [0]:
california_housing_dataframe.hist('housing_median_age')
In [0]:
cities = pd.DataFrame({ 'City name': city_names, 'Population': population })
print(type(cities['City name']))
cities['City name']
In [0]:
print(type(cities['City name'][1]))
cities['City name'][1]
In [0]:
print(type(cities[0:2]))
cities[0:2]
또한 Pandas는 고급 색인 생성 및 선택 기능을 위한 풍부한 API를 제공합니다. 이 내용은 너무 광범위하므로 여기에서 다루지 않습니다.
In [0]:
population / 1000.
NumPy는 유명한 계산과학 툴킷입니다. Pandas Series
는 대부분의 NumPy 함수에 인수로 사용할 수 있습니다.
In [0]:
import numpy as np
np.log(population)
In [0]:
population.apply(lambda val: val > 1000000)
DataFrames
수정 역시 간단합니다. 예를 들어 다음 코드는 기존 DataFrame
에 두 개의 Series
를 추가합니다.
In [0]:
cities['Area square miles'] = pd.Series([46.87, 176.53, 97.92])
cities['Population density'] = cities['Population'] / cities['Area square miles']
cities
In [0]:
# Your code here
In [0]:
cities['Is wide and has saint name'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San'))
cities
In [0]:
city_names.index
In [0]:
cities.index
DataFrame.reindex
를 호출하여 수동으로 행의 순서를 재정렬합니다. 예를 들어 다음은 도시 이름을 기준으로 분류하는 것과 효과가 같습니다.
In [0]:
cities.reindex([2, 0, 1])
색인 재생성은 DataFrame
을 섞기(임의 설정하기) 위한 좋은 방법입니다. 아래의 예에서는 배열처럼 된 색인을 NumPy의 random.permutation
함수에 전달하여 값을 섞습니다. 이렇게 섞인 배열로 reindex
를 호출하면 DataFrame
행도 같은 방식으로 섞입니다.
다음 셀을 여러 번 실행해 보세요.
In [0]:
cities.reindex(np.random.permutation(cities.index))
자세한 정보는 색인 문서를 참조하세요.
In [0]:
# Your code here
reindex
입력 배열에 원래 DataFrame
색인 값에 없는 값을 포함하면 reindex
가 이 \'누락된\' 색인에 새 행을 추가하고 모든 해당 열을 NaN
값으로 채웁니다.
In [0]:
cities.reindex([0, 4, 5, 2])
색인은 보통 실제 데이터에서 가져온 문자열이기 때문에 이 동작이 바람직합니다(Pandas 색인 재생성 문서에서 색인 값이 브라우저 이름인 예제 참조).
이 경우 \'누락된\' 색인을 허용하면 외부 목록을 사용하여 쉽게 색인을 다시 생성할 수 있으므로, 입력 처리에 대해 걱정하지 않아도 됩니다.