그룹핑
이번 시간에는 그룹핑에 대하여 설명해 드리도록 하겠습니다.
이번 시간 정리
1. 1개 컬럼 기준, 평균값 확인
- df.groupby('기준 컬럼명').mean()
2. 다수 컬럼 기준, 평균값 확인
- df.groupby(['기준 컬럼명1', '기준 컬럼명 2']).mean()
이제 아래의 코드 실행 버튼을 눌러 실습을 진행해 보세요!
실행 완료
[63]:
가격칼로리할인율할인가원산지국내산브라질
13128.571429 | 1328.571429 | 0.25 | 10133.333333 |
14500.000000 | 1400.000000 | 0.20 | 11600.000000 |
실행 완료
[64]:
가격칼로리할인가원산지할인율국내산0.20.5브라질0.2
13200.0 | 1420.0 | 10560.0 |
16000.0 | 1200.0 | 8000.0 |
14500.0 | 1400.0 | 11600.0 |
3. 원산지와 할인율 기준, 가격 평균 ->[시리즈 형태]
- df.groupby(['기준 컬럼명1', '기준 컬럼명2'])['구하려는 컬럼'].mean()
4. 원산지와 할인율 기준, 가격 평균 ->[데이터프레임 형태1]
- pd.DataFrame(df.groupby(['기준 컬럼명1', '기준 컬럼명2'])['구하려는 컬럼'].mean())
5.원산지와 할인율 기준, 가격 평균 -> [데이터프레임 형태2]
- df.groupby(['기준 컬럼명1', '기준 컬럼명2'])[['구하려는 컬럼']].mean()
이제 아래의 코드 실행 버튼을 눌러 실습을 진행해 보세요!
실행 완료
[65]:
원산지 할인율
국내산 0.2 13200.0
0.5 16000.0
브라질 0.2 14500.0
Name: 가격, dtype: float64
실행 완료
[69]:
가격원산지할인율국내산0.20.5브라질0.2
13200.0 |
16000.0 |
14500.0 |
실행 완료
[68]:
가격원산지할인율국내산0.20.5브라질0.2
13200.0 |
16000.0 |
14500.0 |
6. 원산지와 할인율 기준 최대값 확인
- df.groupby(['기준 컬럼명1', '기준 컬럼명2']).max()
7. 1개의 인덱스 형태로 리셋
- df.groupby(['기준 컬럼명1', '기준 컬럼명2']).max().reset_index()
이제 아래의 코드 실행 버튼을 눌러 실습을 진행해 보세요!
실행 완료
[66]:
Unnamed: 0메뉴가격호수칼로리할인가원산지할인율국내산0.20.5브라질0.2
6 | 황금후라이드 | 14000 | 9 | 1800.0 | 11200.0 |
new | [인기]아이펠치킨 | 16000 | 11 | 1200.0 | 8000.0 |
5 | 파닭 | 15000 | 12 | 1500.0 | 12000.0 |
실행 완료
[67]:
원산지할인율Unnamed: 0메뉴가격호수칼로리할인가012
국내산 | 0.2 | 6 | 황금후라이드 | 14000 | 9 | 1800.0 | 11200.0 |
국내산 | 0.5 | new | [인기]아이펠치킨 | 16000 | 11 | 1200.0 | 8000.0 |
브라질 | 0.2 | 5 | 파닭 | 15000 | 12 | 1500.0 | 12000.0 |
apply 함수
이번 시간에는 apply 함수에 대하여 설명해 드리도록 하겠습니다.
이 apply 함수를 잘 사용하면 데이터 전 처리할 때 굉장히 유용하게 활용할 수 있다고 하니 잘 배워 두시기 바랍니다!
이번 시간 정리
1. apply() 메서드
-판다스 객체(pandas.DataFame.apply, pandas.Series.apply)에 열 혹은 행에 대해 함수를 적용
2.람다(Lambda) 표현식
-람다 표현식은 (때로 람다 형식(lambda forms)이라고 불립니다) 이름 없는 함수를 만드는 데 사용
이제 아래의 코드 실행 버튼을 눌러 실습을 진행해 보세요!
실행 완료
[75]:
Unnamed: 0메뉴가격호수칼로리할인율할인가원산지고민752341608
new | [인기]아이펠치킨 | 16000 | 11 | 1200.0 | 0.5 | 8000.0 | 국내산 | 무조건먹자 |
5 | 닭강정 | 15000 | 12 | 1500.0 | 0.2 | 12000.0 | 브라질 | 먹지말자 |
2 | 간장치킨 | 14000 | 9 | 1600.0 | 0.2 | 11200.0 | 국내산 | 먹지말자 |
3 | 마늘치킨 | 14000 | 9 | 1800.0 | 0.2 | 11200.0 | 국내산 | 먹지말자 |
4 | 파닭 | 14000 | 11 | 1300.0 | 0.2 | 11200.0 | 브라질 | 먹지말자 |
1 | 승일양념치킨 | 13000 | 10 | 1400.0 | 0.2 | 10400.0 | 국내산 | 먹지말자 |
6 | 양념반후라이드반 | 13000 | 10 | 1300.0 | 0.2 | 10400.0 | 국내산 | 먹지말자 |
0 | 황금후라이드 | 12000 | 10 | 1000.0 | 0.2 | 9600.0 | 국내산 | 무조건먹자 |
10 | [베스트]풀잎치킨 | 9900 | 10 | 1000.0 | NaN | NaN | 국내산 | 무조건먹자 |
실행 완료
[74]:
7 no
5 yes
2 yes
3 yes
4 yes
1 yes
6 yes
0 no
8 no
Name: 칼로리, dtype: object
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/670485884.py in <module>
1 # apply 적용해서 새로운 컬럼 생성 (칼로리 컬럼 활용)
----> 2 df['살찔까요'] = df['칼로리'].apply(cal)
3 df
NameError: name 'cal' is not defined
실행 완료
[72]:
Unnamed: 0메뉴가격호수칼로리할인율할인가원산지고민752341608
new | [인기]아이펠치킨 | 16000 | 11 | 1200.0 | 0.5 | 8000.0 | 국내산 | 무조건먹자 |
5 | 닭강정 | 15000 | 12 | 1500.0 | 0.2 | 12000.0 | 브라질 | 먹지말자 |
2 | 간장치킨 | 14000 | 9 | 1600.0 | 0.2 | 11200.0 | 국내산 | 먹지말자 |
3 | 마늘치킨 | 14000 | 9 | 1800.0 | 0.2 | 11200.0 | 국내산 | 먹지말자 |
4 | 파닭 | 14000 | 11 | 1300.0 | 0.2 | 11200.0 | 브라질 | 먹지말자 |
1 | 승일양념치킨 | 13000 | 10 | 1400.0 | 0.2 | 10400.0 | 국내산 | 먹지말자 |
6 | 양념반후라이드반 | 13000 | 10 | 1300.0 | 0.2 | 10400.0 | 국내산 | 먹지말자 |
0 | 황금후라이드 | 12000 | 10 | 1000.0 | 0.2 | 9600.0 | 국내산 | 무조건먹자 |
10 | [베스트]풀잎치킨 | 9900 | 10 | 1000.0 | NaN | NaN | 국내산 | 무조건먹자 |
코드 실행
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
/tmp/ipykernel_13/3374916280.py in <module>
----> 1 pd.read_csv('final_modudak.csv')
/opt/conda/lib/python3.9/site-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs)
309 stacklevel=stacklevel,
310 )
--> 311 return func(*args, **kwargs)
312
313 return wrapper
/opt/conda/lib/python3.9/site-packages/pandas/io/parsers/readers.py in read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, error_bad_lines, warn_bad_lines, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)
584 kwds.update(kwds_defaults)
585
--> 586 return _read(filepath_or_buffer, kwds)
587
588
/opt/conda/lib/python3.9/site-packages/pandas/io/parsers/readers.py in _read(filepath_or_buffer, kwds)
480
481 # Create the parser.
--> 482 parser = TextFileReader(filepath_or_buffer, **kwds)
483
484 if chunksize or iterator:
/opt/conda/lib/python3.9/site-packages/pandas/io/parsers/readers.py in __init__(self, f, engine, **kwds)
809 self.options["has_index_names"] = kwds["has_index_names"]
810
--> 811 self._engine = self._make_engine(self.engine)
812
813 def close(self):
/opt/conda/lib/python3.9/site-packages/pandas/io/parsers/readers.py in _make_engine(self, engine)
1038 )
1039 # error: Too many arguments for "ParserBase"
-> 1040 return mapping[engine](self.f, **self.options) # type: ignore[call-arg]
1041
1042 def _failover_to_python(self):
/opt/conda/lib/python3.9/site-packages/pandas/io/parsers/c_parser_wrapper.py in __init__(self, src, **kwds)
49
50 # open handles
---> 51 self._open_handles(src, kwds)
52 assert self.handles is not None
53
/opt/conda/lib/python3.9/site-packages/pandas/io/parsers/base_parser.py in _open_handles(self, src, kwds)
220 Let the readers open IOHandles after they are done with their potential raises.
221 """
--> 222 self.handles = get_handle(
223 src,
224 "r",
/opt/conda/lib/python3.9/site-packages/pandas/io/common.py in get_handle(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)
700 if ioargs.encoding and "b" not in ioargs.mode:
701 # Encoding
--> 702 handle = open(
703 handle,
704 ioargs.mode,
FileNotFoundError: [Errno 2] No such file or directory: 'final_modudak.csv'
데이터 핸들링 실습은 여기까지 하도록 하겠습니다. 고생 많으셨습니다.!!
'언어 > 파이썬' 카테고리의 다른 글
머신러닝with파이썬 4강(2)_데이터전처리: 범주형 데이터, 수치형 데이터 (0) | 2024.03.08 |
---|---|
머신러닝with파이썬4강(1)_사이킷런 활용하기, 사이킷런에서 제공하는 데이터셋 (0) | 2024.03.07 |
머신러닝with파이썬3강(4)_내장함수 (0) | 2024.03.05 |
머신러닝with파이썬3강(3)_자료형변환, 데이터탐색 (0) | 2024.03.04 |
머신러닝with파이썬3강(2)_결측치처리,정렬 (0) | 2024.03.03 |