마이클 맥컬리

기계 학습 여정을 위한 Pandas 함수를 알아야 합니다.

소스 노드 : 1865356

이 기사는 데이터 과학 Blogathon

개요

글쎄, 당신이 할 수있는 좋은 가능성이 있습니다!

Python을 기본 프로그래밍 언어로 사용하는 데이터 과학자에게 Pandas 패키지는 필수 데이터 분석 도구입니다. Pandas 패키지에는 데이터 과학자가 필요로 하는 모든 것이 포함되어 있으며 모든 과정에서 처음에는 이를 활용하는 방법을 알려줍니다. 매우 크고 강력하며 상상할 수 있는 거의 모든 표 형식의 조작을 수행합니다. 그러나 이 폭은 때때로 단점이 될 수 있습니다.

드문 경우, 다양한 시나리오를 해결하는 많은 아름다운 기능이 있습니다.

pandas의 주요 단점 중 하나는 pandas가 데이터 구조를 RAM에 저장하기 때문에 데이터 크기가 커질수록 충분하지 않을 수 있기 때문에 큰 데이터 세트에서 어려움을 겪을 수 있다는 것입니다. 이를 위해 PySpark 또는 Dask를 사용하십시오.

Pandas 패키지가 널리 사용되고 있음에도 불구하고 덜 사용되거나 그 존재를 모르기 때문에 사람들이 간과할 수 있는 기능이 여전히 많습니다. 이 게시물은 이러한 기능을 다시 소개하고 Pandas가 이전에 알고 있던 것보다 훨씬 더 유능하다는 것을 보여주기 위한 것입니다.

파이프

pandas에서 간결하고 간결한 방식으로 데이터 정리를 수행하기 위해 파이프 기능을 사용할 수 있습니다. 이 기능을 사용하면 한 번의 작업으로 여러 기능을 결합할 수 있습니다.

예를 들어 drop_duplicates, encode_categoricals, remove_outliers와 같은 인수를 허용하는 함수를 적용하려는 경우입니다.

df_cleaned = (diamonds.pipe(drop_duplicates).pipe(remove_outliers, ['price', 'carat', 'depth']).pipe(encode_categoricals, ['cut', 'color', 'clarity']) )

인수분해

이 기능은 Sklearns Label Encoder의 대안입니다.

# 끝의 [0]에 유의하십시오 diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 이름: cut_enc, dtype: int64

인수분해는 인코딩된 값과 고유한 범주 목록과 같은 값의 튜플을 생성합니다.

값, 고유 = pd.factorize(diamonds["cut"], sort=True) >>> values[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> 고유 ['이상적', '프리미엄', '매우 좋음', '좋음', '보통']

폭발하다

폭발 | 팬더 기능

님이 촬영 한 사진 에데와 포스터 on Unsplash

Explode는 흥미로운 이름을 가진 함수입니다. 예를 들어 설명을 시작하겠습니다.

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("더러운") >>> df
데이터 | 팬더 기능
작성자의 이미지

기능 열에는 목록으로 표시된 두 개의 행이 있습니다. 이 유형의 데이터는 몇 가지 질문이 객관식을 허용하는 설문조사에서 사용할 수 있습니다.

>>> df.explode("더러운", ignore_index=True)
데이터 폭발
작성자의 이미지

이 함수는 값 배열이 있는 셀을 가져와 여러 행으로 분해합니다. 숫자 인덱스의 순서를 유지하려면 ignore_index를 True로 사용하십시오.

사이에

범위 내에서 부울 인덱싱 숫자 기능의 경우 다음과 같은 편리한 기능이 있습니다.

# 3500~3700달러 사이의 다이아몬드를 가져옵니다. diamonds[diamonds["price"].between(3500, 3700, inclusive="neither")].sample(5)
데이터 사이 | 팬더 기능
작성자의 이미지

 

T

DataFrame에는 전치라고 하는 간단한 T 속성이 있습니다. 우리는 그것을 자주 사용하지 않을 수 있습니다. describe 메소드는 데이터 프레임을 볼 때 유용합니다.

>>> boston.describe().T.head(10)
바꾸어 놓다
작성자의 이미지

 

팬더 옵션

기본 동작을 조정하고 변경하는 데 도움이 되는 팬더의 전역 설정을 사용할 수 있습니다.

>>> dir(pd.options) ['계산', '디스플레이', 'io', '모드', '플로팅']

5개의 모듈로 구성되어 있습니다. 디스플레이 아래에서 사용 가능한 옵션을 살펴보겠습니다. 많은 옵션을 사용할 수 있지만 주로 max_columns를 사용합니다.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... '정밀도', 'show_dimensions', '유니코드' , '너비']

대부분의 사람들은 max_columns 및 정밀도를 사용합니다.

# 열 수를 표시하기 위해 제한을 제거합니다. pd.options.display.max_columns = None # 소수점 이하 5자리만 표시 pd.options.display.precision = 5 # 과학적 표기법을 제거합니다.

Convert_dtypes

우리는 판다가 일부 열을 객체 데이터 유형으로 표시하는 성가신 습관이 있다는 것을 모두 알고 있습니다. 유형을 직접 정의하는 대신 최상의 데이터 유형을 추론하려고 시도하는 변환 dtypes 메소드를 사용할 수 있습니다.

샘플 = pd.read_csv("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId 개체 CO float64 O3 float64 AQI_Bucket 개체 dtype: 개체 >>> sample.convert_dtypes().dtypes StationId 문자열 CO float64 O3 float64 AQI_Bucket 문자열 dtype: 개체

Select_dtypes

이름에서 나는 그 기능이 무엇을 하는지 분명하다고 믿습니다. 포함 및 제외 옵션을 사용하여 특정 데이터 유형을 포함하거나 생략하는 열을 지정할 수 있습니다.

np.number가 있는 숫자 열만 선택하십시오. 예를 들면 다음과 같습니다.

# 숫자 열만 선택 diamond.select_dtypes(include=np.number).head()
dtypes 선택
작성자의 이미지

 

마스크

이 기능은 사용자 정의 조건이 충족되지 않는 값을 대체하는 데 도움이 됩니다.

# 샘플 데이터 생성 age = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") age
마스크 | 데이터
작성자의 이미지

위의 작업을 수행한 후.

마스킹 수행
작성자의 이미지

최소 및 최대

min과 max는 잘 알려져 있지만 일부 경우에는 더 나은 속성이 있습니다.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] 라이브러리 = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) for lib in 라이브러리}, index=index ) >>> df
최소 및 최대
작성자 별 이미지 

위의 가상 DataFrame은 XNUMX개의 데이터 세트에 대한 XNUMX개의 서로 다른 그래디언트 부스팅 라이브러리의 결과를 보여줍니다. 우리는 각 데이터 세트에서 가장 잘 수행된 패키지를 찾고 있습니다. 다음은 고급 방식으로 max로 이를 수행하는 방법입니다.

>>> df.max(axis=1) 다이아몬드 99.52684 타이타닉 99.63650 아이리스 99.10989 심장병 99.31627 대출 기본값 97.96728 dtype: float64

Nlargest 및 Nsmallest

nlargest 및 nsmallest는 변수의 상위 N 또는 ~(상위 N) 값을 보는 데 유용합니다.

diamonds.nlargest(5, "가격")
가장 크고 작은
작성자의 이미지
diamonds.nsmallest(5, "가격")
가장 작은
작성자의 이미지

 

Idxmax 및 Idxmin

Pandas는 열에서 max 또는 min을 호출할 때 가장 큰/작은 숫자를 반환합니다. 그러나 이러한 기능이 제공하지 않는 최소/최대의 위치가 필요한 상황이 있습니다.

대신 idxmax/idxmin을 사용할 수 있습니다.

>>> diamonds.price.idxmax() 27749 >>> diamonds.carat.idxmin() 14

값_카운트

누락된 값의 백분율을 찾는 일반적인 방법은 isnull과 sum을 결합하고 배열의 크기로 나누는 것입니다.

그러나 관련 인수가 있는 value_counts는 동일한 작업을 수행합니다.

주택 이름 = pd.read_csv("train.csv") >>> 주택["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 PoQ float0.01370

클립

클립 기능은 범위 밖의 이상값을 찾아 하드 한계로 대체하는 데 도움이 됩니다.

>>> age.clip(50, 60)
클립용 데이터
작성자의 이미지

 

At_time 및 Between_time

이러한 함수는 높은 세분성의 시계열로 작업할 때 유용합니다.

at_time은 특정 날짜 또는 시간의 값을 가져오는 데 도움이 됩니다.

인덱스 = pd.date_range("2021-08-01", 기간=100, freq="H") df = pd.DataFrame({"col": 목록(범위(100))}, 인덱스=인덱스) >> > df.head()
at_time 예 | 팬더 기능
작성자의 이미지

>>> df.at_time(“15:00”)

.at_time | 팬더 기능
작성자의 이미지

사용자 지정 범위 내에서 행을 가져오는 데 사용되는 between_time입니다.

from datetime import datetime >>> df.between_time("09:45", "12:00")
사이_시간
작성자의 이미지

 

날짜_범위

이 기능은 업무일 빈도로 시계열 인덱스를 생성하는 데 도움이 됩니다. 금융 세계에는 이러한 유형의 빈도가 있습니다. 따라서 이 함수는 reindex 함수로 시계열을 다시 인덱싱할 때 유용할 수 있습니다.

series = pd.bdate_range("2021-01-01", "2021-01-31") # 한 달의 기간 >>> len(series) 21

에와 이아트

이 두 접근자는 loc 및 iloc보다 훨씬 빠릅니다. 그러나 단점이 있습니다. 한 번에 하나의 값만 선택하거나 바꿀 수 있습니다.

# [index, label] >>> diamonds.at[234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # 가격 열의 16541번째 행 바꾸기 >> > diamonds.at[16541, "가격"] = 10000

Argsort

이 함수는 기능 배열을 정렬할 인덱스를 추출하는 데 도움이 됩니다.

Tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # 이제 total_bill을 기준으로 `tip`을 정렬합니다. Tips.iloc[sort_idx].head()
arg_sort
작성자의 이미지

 

고양이 액세서

pandas는 str 또는 dt와 같은 접근자를 사용하여 날짜 및 문자열에 대한 파이썬의 내장 함수를 허용합니다.

>>> diamonds.dtypes 캐럿 float64 컷 카테고리 색상 카테고리 투명도 카테고리 깊이 float64 테이블 float64 가격 int64 x float64 y float64 z float64 cut_enc int64 dtype: 객체

범주형 열에서 cat 접근자를 사용하여 많은 특수 기능을 사용할 수 있습니다. 고유한 항목을 찾는 범주, 기능의 이름을 바꾸는 rename_categories 등의 기능이 있습니다.

diamonds["new_cuts"] = diamonds["cut"].cat.rename_categories(list("ABCDE")) >>> diamonds["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='객체')

아래에서 더 많은 기능 목록을 확인하십시오. 고양이 접속자.

압착

Squeeze는 드물지만 악화되는 가장자리 상황에서 사용되는 기능입니다.

DataFrame의 하위 집합에 사용된 조건에서 단일 값이 반환되는 경우가 이러한 경우 중 하나입니다. 다음 시나리오를 고려하십시오.

부분 집합 = diamonds.loc[diamonds.index >> 부분 집합
가격

셀이 하나만 있어도 DataFrame을 반환합니다. 가격을 얻으려면 열 이름과 인덱스를 모두 사용하여 이제 .loc을 사용해야 하므로 불편합니다.

짜는 방법을 안다면 그럴 필요가 없습니다. 이 함수를 사용하여 단일 셀 DataFrame 또는 Series에서 축을 제거할 수 있습니다. 다음 시나리오를 고려하십시오.

>>> 부분집합.squeeze() 326

제거할 축을 지정할 수 있습니다. 이제 스칼라만 반환했습니다.

>>> subset.squeeze("columns") # 또는 "rows" 0 326 이름: 가격, dtype: int64

이 함수는 단일 값이 있는 Series 또는 DataFrame에서만 작동합니다.

엑셀_라이터

Excel 파일을 생성하고 그 안에 DataFrame을 작성하기 위한 일반 클래스입니다. 이 두 데이터 세트가 있다고 가정해 보겠습니다.

# 두 개의 데이터 세트 로드 diamond = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # pd.ExcelWriter("data/data.xlsx")를 작성자로 사용하여 동일한 Excel 파일에 쓰기: diamonds.to_excel (writer, sheet_name="diamonds") Tips.to_excel(writer, sheet_name="tips")

새 파일이 필요하든 기존 파일을 수정하든 상관없이 사용할 DateTime 형식을 지정하는 속성이 있습니다. 시트가 있으면 어떻게 됩니까? 이것을 확인 선적 서류 비치 자세한 내용은.

결론

이것은 판다에 대한 완전한 개요가 아니며, 선적 서류 비치 코드 및 기능에 대한 자세한 정보가 포함되어 있습니다. 여기에 제공된 코드 조각의 다양한 변형과 ​​다양한 매개변수를 실험해 볼 것을 권장합니다. 이렇게 하면 판다의 힘을 충분히 이해할 수 있습니다.

Dask 및 datatable과 같은 라이브러리는 대규모 데이터 세트를 처리하기 위한 화려한 새 기능으로 Pandas를 점차적으로 대체하고 있으며 Pandas는 여전히 Python 데이터 과학 커뮤니티에서 가장 광범위하게 사용되는 데이터 조작 도구입니다. 현재 SciPy 스택에 얼마나 잘 들어맞는지 때문에 라이브러리는 다른 패키지가 따르고 빌드할 수 있는 패러다임 역할을 합니다.

이 게시물이 통찰력이 있기를 바라며 읽어주셔서 감사합니다.

이 기사에 표시된 미디어는 Analytics Vidhya의 소유가 아니며 작성자의 재량에 따라 사용됩니다.

출처: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

타임 스탬프 :

더보기 분석 Vidhya