Pandas: ์ด์ „ ๋ฌธ์ž์—ด ํ˜•์‹ ์ง€์ • ๊ตฌ๋ฌธ์„ f-๋ฌธ์ž์—ด๋กœ ๊ต์ฒด

์— ๋งŒ๋“  2019๋…„ 11์›” 11์ผ  ยท  137์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pandas-dev/pandas

๋” ์ด์ƒ python 3.5๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด์ œ ์ด์ „ .format() ๋Œ€์‹  ์ƒˆ f-๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋ฌผ๋ก  % ํ˜•์‹ ์ง€์ •).

๋…ธํŠธ:

  • ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์˜ ๋ณธ๋ฌธ ๋ฉ”์‹œ์ง€์— ์ด ๋ฌธ์ œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”. ์ด https://github.com/pandas-dev/pandas/issues/29547 ๋ฅผ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์˜ ๋ณธ๋ฌธ ๋ฉ”์‹œ์ง€์— ๋ถ™์—ฌ๋„ฃ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์ด #29886 ๊ณผ ๊ด€๋ จ๋œ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฌธ์ œ์—๋„ pull ์š”์ฒญ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์ด https://github.com/pandas-dev/pandas/issues/29886 ๋ฅผ pull ์š”์ฒญ์˜ ๋ณธ๋ฌธ ๋ฉ”์‹œ์ง€์—๋„ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • ์ด์ค‘ ์ž‘์—…์„ ํ•˜์ง€ ์•Š๋„๋ก ์–ด๋–ค ์ž‘์—…์„ ๊ณ„ํšํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”.

  • ์™„๋ฃŒ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•˜๋Š” ํŒŒ์ผ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”.


pandas ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์•„์ง ์ˆ˜์ •ํ•ด์•ผ ํ•  ํŒŒ์ผ์„ ํ™•์ธํ•˜๋ ค๋ฉด:

grep -l -R '%s'  --include=*.{py,pyx} pandas/
grep -l -R '%d' --include=*.{py,pyx} pandas/
grep -l -R '\.format(' --include=*.{py,pyx} pandas/

์œ„์˜ ๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋‚˜์˜ ๋ผ์ด๋„ˆ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

grep -l -R -e '%s' -e '%d' -e '\.format(' --include=*.{py,pyx} pandas/
ํŒ:

๋ฐœ์ƒ์˜ ์ค„ ๋ฒˆํ˜ธ๋ฅผ ๋ณด๋ ค๋ฉด -l ๋ฅผ -n ๋ฐ”๊พธ์‹ญ์‹œ์˜ค.
์˜ˆ๋ฅผ ๋“ค์–ด:

grep -n -R '%s' --include=*.{py,pyx} pandas/

ํ˜„์žฌ ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • [ ] pandas/compat/pickle_compat.py

  • [ ] ํŒฌ๋”/_config/config.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/datetimelike.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/datetimes.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/integer.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/period.py

  • [ ] pandas/core/computation/pytables.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/config_init.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/frame.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/generic.py

  • [ ] pandas/core/groupby/generic.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/๊ทธ๋ฃน๋น„/๊ทธ๋ฃน๋น„.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/์ธ๋ฑ์Šค/base.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/์ธ๋ฑ์Šค/multi.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/์ธ๋ฑ์Šค/range.py

  • [ ] ํŒฌ๋”/์ฝ”์–ด/์˜ต์Šค/docstrings.py

  • [ ] pandas/core/ops/__init__.py

  • [ ] pandas/core/reshape/merge.py

  • [ ] pandas/core/tools/datetimes.py

  • [ ] ํŒฌ๋”/io/formats/css.py

  • [ ] ํŒฌ๋”/io/formats/excel.py

  • [ ] ํŒฌ๋”/io/formats/format.py

  • [ ] ํŒฌ๋”/io/formats/html.py

  • [ ] ํŒฌ๋”/io/formats/info.py

  • [ ] ํŒฌ๋”/io/formats/latex.py

  • [ ] ํŒฌ๋”/io/formats/printing.py

  • [ ] ํŒฌ๋”/io/formats/style.py

  • [ ] ํŒฌ๋”/io/parsers.py

  • [ ] ํŒฌ๋”/io/pytables.py

  • [ ] ํŒฌ๋”/io/sas/sas_xport.py

  • [ ] ํŒฌ๋”/io/stata.py

  • [ ] ํŒฌ๋”/_libs/tslibs/c_timestamp.pyx

  • [ ] ํŒฌ๋”/_libs/tslibs/frequency.pyx

  • [ ] ํŒฌ๋”/_libs/tslibs/parsing.pyx

  • [ ] ํŒฌ๋”/_libs/tslibs/period.pyx

  • [ ] ํŒฌ๋”/_libs/tslibs/strptime.pyx

  • [ ] ํŒฌ๋”/_libs/tslibs/timedeltas.pyx

  • [ ] ํŒฌ๋”/ํ”Œ๋กœํŒ…/_matplotlib/converter.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋ฐฐ์—ด/์นดํ…Œ๊ณ ๋ฆฌ/test_operators.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋ฐฐ์—ด/test_datetimelike.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/dtypes/test_dtypes.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ™•์žฅ/๋ฒ ์ด์Šค/setitem.py

  • [ ] ํŒฌ๋”/tests/frame/test_constructors.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_missing.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_to_csv.py

  • [ ] pandas/tests/groupby/aggregate/test_other.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/datetimes/test_date_range.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/datetimes/test_datetime.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/datetimes/test_formats.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/datetimes/test_partial_slicing.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/๊ฐ„๊ฒฉ/test_constructors.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/๊ฐ„๊ฒฉ/ํ…Œ์ŠคํŠธ_๊ฐ„๊ฒฉ.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/๋ฉ€ํ‹ฐ/ํ…Œ์ŠคํŠธ_ํฌ๋งท.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/๊ธฐ๊ฐ„/test_formats.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/test_base.py

  • [ ] pandas/tests/indexes/timedeltas/test_timedelta.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์‹ฑ/test_categorical.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์‹ฑ/test_coercion.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/excel/test_openpyxl.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/excel/test_writers.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/formats/test_format.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/formats/test_printing.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/formats/test_style.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/formats/test_to_csv.py

  • [ ] ํŒฌ๋”/tests/io/formats/test_to_html.py

  • [ ] ํŒฌ๋”/tests/io/formats/test_to_latex.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_compression.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_encoding.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_header.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_parse_dates.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_usecols.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/test_html.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/test_sql.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/test_stata.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๊ฐ์†Œ/test_reductions.py

  • [ ] ํŒฌ๋”/tests/reshape/test_concat.py

  • [ ] pandas/tests/reshape/test_melt.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์Šค์นผ๋ผ/๊ธฐ๊ฐ„/test_period.py

  • [ ] pandas/tests/scalar/timedelta/test_timedelta.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์Šค์นผ๋ผ/ํƒ€์ž„์Šคํƒฌํ”„/test_constructors.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_numeric.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_take.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_where.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/๋ฉ”์†Œ๋“œ/test_rename.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_api.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_constructors.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_datetime_values.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_repr.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/test_strings.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋„๊ตฌ/test_to_datetime.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tseries/holiday/test_calendar.py

  • [ ] pandas/tests/tseries/holiday/test_holiday.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tslibs/test_parsing.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์œ ํ‹ธ/ํ…Œ์ŠคํŠธ_assert_frame_equal.py

  • [ ] ํŒฌ๋”/tseries/frequencies.py

  • [ ] ํŒฌ๋”/util/_decorators.py

  • [ ] ํŒฌ๋”/์œ ํ‹ธ/_test_decorators.py

  • [ ] ํŒฌ๋”/์œ ํ‹ธ/_validators.py

  • [ ] ํŒฌ๋”/_version.py


๋…ธํŠธ:

ํŒŒ์ผ์ด ์ง€์†์ ์œผ๋กœ ์ด๋™/์ด๋ฆ„ ๋ณ€๊ฒฝ๋จ์— ๋”ฐ๋ผ ๋ชฉ๋ก์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด PR ์—์„œ ์ƒ์†๋œ ํŒŒ์ผ ๋ฐ ๋ช…๋ น.

Style good first issue

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด https://github.com/pandas-dev/pandas/pull/32007๋กœ ๋‚ด ์ฒซ ๋ฒˆ์งธ pull ์š”์ฒญ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_to_csv.py

๋ชจ๋“  137 ๋Œ“๊ธ€

๋‚ด๊ฐ€ ์ฑ™๊ธธ๊ฑฐ๋‹ค:

  • [x] ํŒฌ๋”/_libs/groupby.pyx

  • [x] ํŒฌ๋”/_libs/hashing.pyx

  • [x] ํŒฌ๋”/_libs/index.pyx

  • [x] ํŒฌ๋”/_libs/internals.pyx

  • [x] ํŒฌ๋”/_libs/interval.pyx

  • [x] ํŒฌ๋”/_libs/lib.pyx

  • [x] ํŒฌ๋”/_libs/ops.pyx

  • [x] ํŒฌ๋”/_libs/parsers.pyx

  • [x] ํŒฌ๋”/_libs/reduction.pyx

  • [x] ํŒฌ๋”/_libs/sparse.pyx

  • [x] ํŒฌ๋”/_libs/testing.pyx

  • [x] ํŒฌ๋”/_libs/tslib.pyx

  • [x] ํŒฌ๋”/_libs/window.pyx

๋‚ด๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/test_base.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/test_category.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/test_common.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/test_numeric.py

์‹œ์ž‘ํ•˜๋ ค๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š” @MomIsBestFriend ์ด ๋ณ€ํ™˜์„ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ถ”์ฒœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋น ๋ฅธ ๋ณด๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์—…๊ทธ๋ ˆ์ด๋“œ
  2. fstringify
  3. ํ”Œ๋ฆฐํŠธ

๋‚˜๋Š” ๊ทธ๋“ค ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์—†์ง€๋งŒ ์—ฌ๊ธฐ์— ๋งค์šฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@SaturnFromTitan๋‹˜ , ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๊ฐ€๋” pyupgrade๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ํŒŒ์ผ์— ๋ช‡ ๊ฐ€์ง€ ์˜ค๋ž˜๋œ ๋ฌธ์ž์—ด ํ˜•์‹๋งŒ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณด๊ณ  pyupgrade์— ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ํŒŒ์ผ์ผ ๋•Œ "๋ณต์žกํ•œ" ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ์ฐพ์•„(์˜ˆ: '%.2f' % my_float ) ์ผ๋ฐ˜์ ์ธ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ์ œ๋Œ€๋กœ ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ผ๋ถ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์ด pep8๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์— ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  • [x] pandas/compat/__init__.py

  • [x] pandas/compat/numpy/function.py

  • [x] pandas/compat/numpy/__init__.py

  • [x] pandas/compat/_optional.py

๋‚ด๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  • [x] pandas/core/reshape/concat.py
  • [x] pandas/core/reshape/melt.py
  • [ ] pandas/core/reshape/merge.py
  • [x] pandas/core/reshape/pivot.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/reshape/reshape.py
  • [ ] pandas/core/reshape/tile.py

์ด๊ฒƒ์„ good first issue ๋กœ ํƒœ๊ทธํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์˜ ์ƒ๊ฐ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํŒŒ์ผ์— ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๋ณ€๊ฒฝ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์ผ๋‹น ๋ช‡ ์ค„ ์ •๋„์ด๋ฉฐ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ์€ ์ฝ”๋“œ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(์ˆ˜ํ–‰๋˜๋Š” ์ตœ์ข… ๊ธฐ๋Šฅ์ด ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—).

#28926๊ณผ ์œ ์‚ฌํ•œ ์„ค์ •์„ ์ƒ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

f-๋ฌธ์ž์—ด ๊ต์ฒด ์œ„์น˜:

  • [x] pandas/core/groupby/generic.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/๊ทธ๋ฃน๋น„/๊ทธ๋ฃน๋น„.py
  • [x] pandas/core/groupby/grouper.py
  • [x] pandas/core/groupby/ops.py

์ฐธ์กฐ #29701

๋‹ค์Œ์— ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  • [x] ํŒฌ๋”/_libs/tslibs/conversion.pyx

  • [x] ํŒฌ๋”/_libs/tslibs/c_timestamp.pyx

  • [x] ํŒฌ๋”/_libs/tslibs/fields.pyx

  • [x] ํŒฌ๋”/_libs/tslibs/nattype.pyx

  • [x] ํŒฌ๋”/_libs/tslibs/np_datetime.pyx

  • [x] ํŒฌ๋”/_libs/tslibs/offsets.pyx

  • [x] ํŒฌ๋”/_libs/tslibs/parsing.pyx

  • [x] ํŒฌ๋”/_libs/tslibs/timestamps.pyx

  • [x] ํŒฌ๋”/_libs/tslibs/timezones.pyx

  • [x] ํŒฌ๋”/_libs/tslibs/tzconversion.pyx

๋‚ด๊ฐ€ ๊ฑธ๋ฆด๊ฑฐ์•ผ

  • [x] ํŒฌ๋”/ํ”Œ๋กœํŒ…/_core.py
  • [x] ํŒฌ๋”/ํ”Œ๋กœํŒ…/_matplotlib/boxplot.py
  • [x] ํŒฌ๋”/ํ”Œ๋กœํŒ…/_matplotlib/converter.py
  • [x] ํŒฌ๋”/ํ”Œ๋กœํŒ…/_matplotlib/core.py
  • [x] ํŒฌ๋”/ํ”Œ๋กœํŒ…/_matplotlib/misc.py
  • [x] ํŒฌ๋”/ํ”Œ๋กœํŒ…/_matplotlib/style.py
  • [x] ํŒฌ๋”/ํ”Œ๋กœํŒ…/_matplotlib/timeseries.py
  • [x] ํŒฌ๋”/ํ”Œ๋กœํŒ…/_matplotlib/tools.py
  • [x] ํŒฌ๋”/ํ”Œ๋กœํŒ…/_misc.py

์ฐธ์กฐ #29781

๋‚ด๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  • [x] pandas/core/reshape/concat.py
  • [x] pandas/core/reshape/melt.py
  • [ ] pandas/core/reshape/merge.py
  • [x] pandas/core/reshape/pivot.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/reshape/reshape.py
  • [ ] pandas/core/reshape/tile.py

์ด๊ฒƒ์„ good first issue ๋กœ ํƒœ๊ทธํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์˜ ์ƒ๊ฐ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํŒŒ์ผ์— ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๋ณ€๊ฒฝ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์ผ๋‹น ๋ช‡ ์ค„ ์ •๋„์ด๋ฉฐ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ์€ ์ฝ”๋“œ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(์ˆ˜ํ–‰๋˜๋Š” ์ตœ์ข… ๊ธฐ๋Šฅ์ด ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—).

#28926๊ณผ ์œ ์‚ฌํ•œ ์„ค์ •์„ ์ƒ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๊ทธ์— ๋”ฐ๋ผ ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”

๋‹ค์Œ ๋ณต์šฉ:

  • [x] ํŒฌ๋” / io / msgpack / _packer.pyx

  • [x] ํŒฌ๋” / io / msgpack / _unpacker.pyx

  • [x] ํŒฌ๋” / io / sas / sas.pyx

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…ํ•  ํŒŒ์ผ์„ ์ง€์ •ํ•˜๋„๋ก ์š”์ฒญํ•˜์‹  ๊ฒƒ์„ ๋ฐฉ๊ธˆ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฐฉ๊ธˆ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋‹ค

grep -n -R -e '%s' -e '%d' -e '.format(' --include=*.{py,pyx} ํŒฌ๋”/

์˜ค๋ž˜๋œ ํ˜•์‹์„ ์ฐพ์œผ๋ ค๋ฉด. ์‚ฌ๊ณผํ•œ๋‹ค

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…ํ•  ํŒŒ์ผ์„ ์ง€์ •ํ•˜๋„๋ก ์š”์ฒญํ•˜์‹  ๊ฒƒ์„ ๋ฐฉ๊ธˆ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฐฉ๊ธˆ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋‹ค

@ForTimeBeing ๊ทธ๋ž˜์„œ ์ œ๊ฐ€ ํฌ์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—…ํ•œ ๊ฒƒ์„ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋Œ“๊ธ€์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ.

๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค.

  • [x] pandas/tests/resample/test_datetime_index.py
  • [x] pandas/tests/resample/test_time_grouper.py
  • [x] pandas/tests/tseries/offsets/common.py
  • [x] ํŒฌ๋”/์˜ค๋ฅ˜/__init__.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋ฐฐ์—ด/๊ฐ„๊ฒฉ/test_ops.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋ฐฐ์—ด/sparse/test_array.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋ฐฐ์—ด/sparse/test_libsparse.py
  • [x] pandas/tests/extension/arrow/arrays.py
  • [x] pandas/tests/extension/base/printing.py
  • [x] pandas/tests/extension/decimal/array.py
  • [x] pandas/tests/resample/test_datetime_index.py
  • [x] pandas/tests/resample/test_time_grouper.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์Šค์นผ๋ผ/test_nat.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tseries/offsets/common.py

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜

  • [x] ํŒฌ๋”/tseries/frequencies.py

.format์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์กด์žฌํ•˜๊ณ  grep ๊ฒ€์ƒ‰์— ํ‘œ์‹œ๋˜์ง€๋งŒ fstring์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋ฆฌํ„ฐ๋Ÿด์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋ชจ๋“  ๋ฆฌํ„ฐ๋Ÿด์€ ์ด์ œ ํ•ด๋‹น ํŒŒ์ผ์—์„œ fstring์œผ๋กœ ์Šค์™‘๋ฉ๋‹ˆ๋‹ค.

.format์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์กด์žฌํ•˜๊ณ  grep ๊ฒ€์ƒ‰์— ํ‘œ์‹œ๋˜์ง€๋งŒ fstring์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋ฆฌํ„ฐ๋Ÿด์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋ชจ๋“  ๋ฆฌํ„ฐ๋Ÿด์€ ์ด์ œ ํ•ด๋‹น ํŒŒ์ผ์—์„œ fstring์œผ๋กœ ์Šค์™‘๋ฉ๋‹ˆ๋‹ค.

@ForTimeBeing
์•„๋ฌด ๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค:)
ํ™๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

๋‚ด๊ฐ€ ๊ฐ€์ ธ

  • [x] ํŒฌ๋”/์ฝ”์–ด/์ฐฝ/๊ณตํ†ต.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/์ฐฝ/ewm.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/์ฐฝ/ํ™•์žฅ.py
  • [x] pandas/core/window/rolling.py

์ฐธ์กฐ #29952

๋‚ด๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  • [x] ci/print_skip.py

  • [x] ๋ฌธ์„œ/make.py

  • [x] ๋ฌธ์„œ/sphinxext/announce.py

  • [x] ๋ฌธ์„œ/sphinxext/contributors.py

์ž‘์—… ์ค‘: 'pandas/core/dtypes/dtypes.py'

๊ฐ€์ง€๊ณ  ๊ฐ”๋‹ค:

  • [x] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/base.py
  • [x] pandas/core/arrays/datetimelike.py
  • [x] pandas/core/arrays/datetimes.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/๋ฌธ์ž์—ด_.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/timedelta.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/common.py
  • [x] pandas/core/computation/align.py
  • [x] pandas/core/computation/engines.py
  • [x] pandas/core/computation/eval.py
  • [x] pandas/core/computation/expressions.py
  • [x] pandas/core/computation/expr.py
  • [x] pandas/core/computation/ops.py
  • [x] pandas/core/computation/pytables.py
  • [x] pandas/core/computation/scope.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/frame.py
  • [x] pandas/core/generic.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/๋ฌธ์ž์—ด.py

์ฐธ์กฐ: #30116, #30135, #30363

๋‚ด๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  • [x] ํŒฌ๋”/_libs/tslibs/frequency.pyx
  • [x] ํŒฌ๋”/_libs/tslibs/period.pyx
  • [x] ํŒฌ๋”/_libs/tslibs/strptime.pyx

๋ฏธ๋ฆฌ ์ •์˜๋œ ๋ฌธ์ž์—ด์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋ฌธ์ž์—ด์ด ์žˆ๋Š” ์ƒํ™ฉ์„ ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค.
THE_MESSAGE = "์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์‹œ์ง€. Arg1: {arg1}, Arg2: {arg2}."
๋‹ค์Œ๊ณผ ๊ฐ™์ด .format() ์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
THE_MESSAGE.format(arg1_str, arg2_str).

์•„๋ž˜์— ์„ค๋ช…๋œ ๋ฐฉ์‹์œผ๋กœ ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๊ฒƒ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
THE_MESSAGE = ๋žŒ๋‹ค arg1, arg2: f"์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. Arg1: {arg1}, Arg2: {arg2}."

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ํ˜ธ์ถœ
THE_MESSAGE(arg1_str, arg2_str)?

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด์ด ๋ฌธ์ œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ์ •์˜๋œ ๋ฌธ์ž์—ด์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์™„์ „ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. pep 498์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ๋ฌธ์ž์—ด์€ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ์—ฐ๊ฒฐ๋˜๊ณ  f-๋ฌธ์ž์—ด์€ ๋Ÿฐํƒ€์ž„์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

.format() ์˜ ์‚ฌ์šฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค๋ฅธ ๋ฌธ์ž์—ด ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ stdlib์˜ string.Template ๋ฟ์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@jbrockmendel ๋„์™€์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”?

@MomIsBestFriend ๋žŒ๋‹ค ํ•จ์ˆ˜๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ณผ๋„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

@MomIsBestFriend .format ๋ช‡ ๊ฐœ๋กœ ์‚ฌ๋Š” ๊ฒƒ์ด

@MomIsBestFriend ๋žŒ๋‹ค ํ•จ์ˆ˜๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ณผ๋„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ „๋ฌธ๊ฐ€์— ๊ฐ€๊น์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช…์—๊ฒŒ ๋ฌธ์˜ํ•˜์‹ญ์‹œ์˜ค.

๊ฐ€์ง€๊ณ  ๊ฐ”๋‹ค

  • [x] pandas/core/accessor.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/algorithms.py

์ฐธ์กฐ #30120

๊ฐ€์ง€๊ณ  ๊ฐ”๋‹ค

  • [x] pandas/core/arrays/sparse/accessor.py
  • [x] pandas/core/arrays/sparse/array.py
  • [x] pandas/core/arrays/sparse/dtype.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/sparse/scipy_sparse.py

์ฐธ์กฐ #30121

๊ฐ€์ง€๊ณ  ๊ฐ”๋‹ค

  • [x] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/_ranges.py
  • [x] pandas/core/arrays/integer.py
  • [x] pandas/core/arrays/interval.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/numpy_.py
  • [x] pandas/core/arrays/period.py

์ฐธ์กฐ #30124

๋‚ด๊ฐ€ ๊ฑธ๋ฆด๊ฑฐ์•ผ

  • [x] ํŒฌ๋”/io/formats/css.py
  • [x] ํŒฌ๋”/io/formats/excel.py
  • [x] ํŒฌ๋”/io/formats/style.py

ํŽธ์ง‘ํ•˜๋‹ค:
์ทจ๋“:

  • [x] pandas/util/_decorators.py
  • [x] pandas/util/_depr_module.py

  • [x] ํŒฌ๋”/์œ ํ‹ธ/_doctools.py

  • [x] pandas/util/_print_versions.py

  • [x] pandas/util/_test_decorators.py

  • [x] pandas/util/_tester.py

  • [x] ํŒฌ๋”/์œ ํ‹ธ/testing.py

  • [x] pandas/util/_validators.py

๋‚ด๊ฐ€ ๊ฑธ๋ฆด๊ฑฐ์•ผ

  • [ ] ํŒฌ๋”/์ฝ”์–ด/config_init.py
  • [x] pandas/core/construction.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/dtypes/base.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/dtypes/cast.py

๊ฐ์‚ฌ ํ•ด์š”!

๋‚ด๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”Œ๋กœํŒ…/test_converter.py

ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”Œ๋กœํŒ…/test_datetimelike.py

ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”Œ๋กœํŒ…/test_series.py

๋‚ด๊ฐ€ ๊ฑธ๋ฆด๊ฑฐ์•ผ

  • [x] pandas/core/indexes/accessors.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/์ธ๋ฑ์Šค/์นดํ…Œ๊ณ ๋ฆฌ.py
  • [x] pandas/core/indexes/datetimelike.py
  • [x] pandas/core/indexes/datetimes.py
  • [x] pandas/core/indexes/frozen.py
  • [x] pandas/core/indexes/interval.py
  • [x] pandas/core/indexes/multi.py
  • [x] pandas/core/indexes/numeric.py
  • [x] pandas/core/indexes/period.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/์ธ๋ฑ์Šค/range.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/์ธ๋ฑ์Šค/timedelta.py

30273

์•ˆ๋…•ํ•˜์„ธ์š”, @MomIsBestFriend

ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”Œ๋กœํŒ…/test_converter.py

ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”Œ๋กœํŒ…/test_datetimelike.py

ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”Œ๋กœํŒ…/test_series.py

์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ
๋‚ด๊ฐ€ ๊ฐ€์งˆ ์ˆ˜์žˆ๋‹ค

  • [ ] ํŒฌ๋”/์ฝ”์–ด/dtypes/dtypes.py
  • [ ] ํŒฌ๋”/์ฝ”์–ด/dtypes/common.py

๊ฐ์‚ฌ ํ•ด์š”

์•ˆ๋…•, ๋‚ด๊ฐ€ ๊ฐ€์ ธ๊ฐˆ๊ฒŒ

  • [x] setup.py
  • [x] ํŒฌ๋”/_config/config.py
  • [x] ํŒฌ๋”/_config/localization.py

๊ฐ์‚ฌ ํ•ด์š”!

๋‚˜๋Š” ๊ฐ€์ง€๊ณ  ๊ฐ”๋‹ค:

  • pandas/core/missing.py
  • pandas/core/nanops.py
  • pandas/tests/indexes/datetimes/test_partial_slicing.py

๋‚ด ํ™๋ณด ๋งํฌ: https://github.com/pandas-dev/pandas/pull/30278

๋‚˜๋Š” ์ผํ•  ๊ฒƒ์ด๋‹ค:

  • [ ] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/base.py

์—ฌ๊ธฐ '์ข‹์€ ์ฒซ ๋ฐœํ–‰'์ด๋ผ๋Š” ํƒœ๊ทธ ๋•Œ๋ฌธ์—

๋‚ด๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  • [ ] ํŒฌ๋”/io/sql.py

  • [ ] ํŒฌ๋”/io/stata.py

๊ฐ์‚ฌ ํ•ด์š”!

๋‚ด๊ฐ€ ํ• ๊ฑฐ์•ผ:

  • [x] ํŒฌ๋”/์ฝ”์–ด/resample.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/์ธ๋ฑ์‹ฑ.py
  • [x] pandas/core/internals/construction.py
  • [x] pandas/core/internals/managers.py
  • [x] pandas/core/internals/blocks.py

๋‚˜๋Š” ์ทจํ•˜๊ณ  ์‹ถ๋‹ค
๋‚˜๋Š” ์ง€๊ธˆ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ–ˆ๋‹ค

  • [x] pandas/core/indexers.pyz

์ข‹์•„, ํ•ญ์ƒ Pandas์— ์นฉ์„ ๋„ฃ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋ช‡ ์ฃผ ์•ˆ์— ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๊ฒŒ ๋˜๋ฉด ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค...

๋‚ด๊ฐ€ ๊ฐ€์งˆ ์ˆ˜์žˆ๋‹ค
ํŒฌ๋”/_version.py

์ ํ”„:

  • [ ] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/datetimelike.py
  • [x] ํŒฌ๋”/io/formats/printing.py
  • [x] pandas/tests/extension/list/array.py
  • [x] pandas/tests/indexes/datetimes/test_ops.py
  • [x] pandas/tests/indexes/multi/test_analytics.py

pandas/io/formats/csvs.py๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฑ™๊ธธ๊ฑฐ๋‹ค:

  • [x] pandas/core/series.py(์ฝ”๋“œ์— ๊ตฌ์‹ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ ์—†์Œ, ๋ฌธ์„œ๋งŒ ์žˆ์Œ)
  • [x] pandas/core/tools/datetimes.py (๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ, 12์›” 25์ผ ์ด์ „์— ํ…Œ์ŠคํŠธ ๋ฐ pullrequest ์ƒ์„ฑ)

์งˆ๋ฌธ: API ์ฐธ์กฐ์— ๊ตฌ์‹ ๋ฌธ์ž์—ด ํ˜•์‹์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด series.map() :

 It also accepts a function:

        >>> s.map('I am a {}'.format)
        0       I am a cat
        1       I am a dog
        2       I am a nan
        3    I am a rabbit
        dtype: object

์ด๊ฒƒ์„ f-string ์˜ˆ์ œ๋กœ ๋ฐ”๊พธ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.

      >>> s.map(lambda x: f'I am a {x}')
        0       I am a cat
        1       I am a dog
        2       I am a nan
        3    I am a rabbit
        dtype: object

์ด๊ฒƒ์€ ์ •ํ™•ํ•œ ๋Œ€์ฒด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค(f-๋ฌธ์ž์—ด์€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 'I am a '.format() )์˜ ์ˆœ ํšจ๊ณผ๋ฅผ ๋ณต์ œํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์˜ ์ผ๋ถ€ ๋น„ ๋ชจ๋ฒ” ์‚ฌ๋ก€.

ํ˜„์žฌ๋กœ์„œ๋Š” ์ด์™€ ๊ฐ™์€ ์‚ฌ๋ก€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ฒฐ์ •์ด ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฌธ์„œ๋ฅผ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ์™„๋ฃŒ(๋ˆ„๊ตฌ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Œ):
ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋ฐฐ์—ด/๊ฐ„๊ฒฉ/test_ops.py

๋‚˜๋„ ๋ฐ๋ ค๊ฐˆ๊ฒŒ

  • [x] pandas/tests/scalar/interval/test_ops.py
  • [x] pandas/tests/computation/test_eval.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/dtypes/*
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/dtypes/cast/test_infer_dtype.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/dtypes/test_dtypes.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/dtypes/test_inference.py

์งˆ๋ฌธ: API ์ฐธ์กฐ์— ๊ตฌ์‹ ๋ฌธ์ž์—ด ํ˜•์‹์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ด ์žˆ์Šต๋‹ˆ๊นŒ?

cc @WillAyd @jreback

๋‚˜๋Š” ๋‹น์‹ ์ด "๊ตฌ์‹ ๋ฌธ์ž์—ด ํ˜•์‹"์„ ๋ฌด์—‡์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€ ๋ชจ๋ฅด์ง€๋งŒ .format ์—๋Š” f-๋ฌธ์ž์—ด์ด ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€(์ฆ‰, ์ง€์—ฐ๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”)๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ์ „ํžˆ ์ฃผ๋ณ€์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. . ๊ทธ๋ž˜๋„ Py27 ๋ฌธ์ž์—ด ํ˜•์‹ ๊ตฌ๋ฌธ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ฐ€์ ธ๊ฐˆ๊ฒŒ:

  • [x] ํŒฌ๋”/tests/io/formats/test_css.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/formats/test_format.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/formats/test_printing.py
  • [x] ํŒฌ๋”/tests/io/formats/test_style.py
  • [x] ํŒฌ๋”/tests/io/formats/test_to_csv.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/formats/test_to_excel.py

๋‚ด๊ฐ€ ๊ฑธ๋ฆด๊ฑฐ์•ผ

  • [x] pandas/compat/pickle_compat.py
  • [x] ํŒฌ๋”/_config/config.py
  • [x] pandas/core/arrays/boolean.py

#30601์—์„œ ๋‚ด๊ฐ€ ๋งก์•˜์–ด

  • [x] ํŒฌ๋”/io/excel/_base.py
  • [x] ํŒฌ๋”/io/excel/_odfreader.py
  • [x] ํŒฌ๋”/io/excel/_openpyxl.py
  • [x] ํŒฌ๋”/io/excel/_util.py
  • [x] ํŒฌ๋”/io/excel/_xlwt.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ผ๋ฐ˜/test_frame.py
  • [x] pandas/tests/generic/test_generic.py
  • [x] pandas/tests/generic/test_series.py

๊ดœ์ฐฎ์œผ์‹œ๋‹ค๋ฉด ์•„๋ž˜ ๋‘ ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์„œ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

  • [x] pandas/tests/base/test_conversion.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋ฒ ์ด์Šค/test_ops.py

์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ #30604์—์„œ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ณต์šฉ:

  • [ ] pandas/core/ops/array_ops.py
  • [ ] ํŒฌ๋”/์ฝ”์–ด/์ž‘๋™/๋””์ŠคํŒจ์น˜.py
  • [ ] ํŒฌ๋”/์ฝ”์–ด/์˜ต์Šค/docstrings.py
  • [ ] pandas/core/ops/invalid.py
  • [ ] ํŒฌ๋”/์ฝ”์–ด/์ž‘๋™/๋ฉ”์†Œ๋“œ.py
  • [ ] pandas/core/ops/roperator.py

PR์—์„œ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๋Š” .format ์˜ ์ด์ „ ์˜๋„๋œ ์šฉ๋„๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์„ ํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ค ๊ฒƒ์ด ์ข‹์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ผ๊ณ  (์ž˜๋ชป) ๊ฐ€์ •ํ•˜๊ณ  PR์—์„œ ๊ฐ„๊ณผํ•˜๋Š” ๊ฒฝ์šฐ

์ž‘์—…

  • [x] pandas/tests/groupby/aggregate/test_other.py
  • [x] pandas/tests/groupby/test_apply.py
  • [x] pandas/tests/groupby/test_bin_groupby.py
  • [x] pandas/tests/groupby/test_categorical.py
  • [x] pandas/tests/groupby/test_counting.py
  • [x] pandas/tests/groupby/test_value_counts.py
  • [x] pandas/tests/groupby/test_function.py
  • [x] pandas/tests/groupby/test_groupby.py
  • [x] pandas/tests/groupby/test_transform.py
  • [x] pandas/tests/groupby/test_whitelist.py

๋‚ด๊ฐ€ ๊ฑธ๋ฆด๊ฑฐ์•ผ

  • [X] ์Šคํฌ๋ฆฝํŠธ/validate_docstrings.py
  • [X] ์Šคํฌ๋ฆฝํŠธ/ํ…Œ์ŠคํŠธ/test_validate_docstrings.py
  • [X] ์Šคํฌ๋ฆฝํŠธ/generate_pip_deps_from_conda.py
  • [X] ์Šคํฌ๋ฆฝํŠธ/download_wheels.py
  • [X] pandas/tseries/holiday.py
  • [X] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ฐฝ/ํ…Œ์ŠคํŠธ_์ฐฝ.py
  • [X] pandas/tests/util/test_validate_kwargs.py
  • [X] pandas/tests/util/test_validate_args.py

๋‚˜๋Š” ์‹œ๋„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค:

  • [x] pandas/tests/util/test_assert_almost_equal.py
  • [x] pandas/tests/util/test_assert_categorical_equal.py
  • [x] pandas/tests/util/test_assert_extension_array_equal.py
  • [x] pandas/tests/util/test_assert_frame_equal.py
  • [x] pandas/tests/util/test_assert_index_equal.py
  • [x] pandas/tests/util/test_assert_numpy_array_equal.py
  • [x] pandas/tests/util/test_validate_args_and_kwargs.py

๋‚˜๋Š” ๊ฐ€์ง€๊ณ  ์‹ถ๋‹ค:

  • [x] pandas/core/arrays/period.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/dtypes/common.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/dtypes/dtypes.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/frame.py

@HH-MWB ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

๋‚˜๋Š” ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค:

  • [ ] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/timedeltas.py

๋‚˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ๋ฐœ๊ฒฌ @Appender() ์‚ฌ์šฉํ•˜๋Š” % ํ˜•์‹ ๋ฌธ์ž์—ด์—. ํ•ด๋‹น ์ฝ”๋“œ๋Š” _shared_docs ๋ฅผ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„ /pandas/core/generic.py์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ๊ต์ฐจํ•˜์—ฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  _shared_docs ๊ด€๋ จ ์„œ์‹์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋งŽ์€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜์ง€๋งŒ ํ•ด๋‹น ํŒŒ์ผ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋ฌธ์ž์—ด ํ˜•์‹ ์ง€์ • ๊ตฌ๋ฌธ์„ ํ™•์ธํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ๋ฆฌ์ž…๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? Replying to @kangminaaaaaa

๋‚˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ๋ฐœ๊ฒฌ @Appender() ์‚ฌ์šฉํ•˜๋Š” % ํ˜•์‹ ๋ฌธ์ž์—ด์—. ํ•ด๋‹น ์ฝ”๋“œ๋Š” _shared_docs ๋ฅผ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„ /pandas/core/generic.py์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ๊ต์ฐจํ•˜์—ฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  _shared_docs ๊ด€๋ จ ์„œ์‹์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋งŽ์€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜์ง€๋งŒ ํ•ด๋‹น ํŒŒ์ผ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋ฌธ์ž์—ด ํ˜•์‹ ์ง€์ • ๊ตฌ๋ฌธ์„ ํ™•์ธํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ๋ฆฌ์ž…๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? Replying to

@HH-MWB ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ •๋ง๋กœ ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” jreback๊ณผ WillAyd ๋ฐ datapythonista(๊ทธ๋“ค์„ ๊ท€์ฐฎ๊ฒŒ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์Œ)๊ฐ€ ์ œ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋‹น์‹ ์„ ๋” ๋งŽ์ด ๋„์šธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค :)

Appender๋กœ ๋Œ€์ฒดํ•˜๋ ค๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” f-๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค

.format์ด Py27 ๊ตฌ๋ฌธ์„ ๋Œ€์ฒดํ•˜๋ฉด ๊ดœ์ฐฎ์ง€๋งŒ ๋…ผ์˜ํ•  ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ด์–ด๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Appender๋กœ ๋Œ€์ฒดํ•˜๋ ค๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” f-๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค

.format์ด Py27 ๊ตฌ๋ฌธ์„ ๋Œ€์ฒดํ•˜๋ฉด ๊ดœ์ฐฎ์ง€๋งŒ ๋…ผ์˜ํ•  ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ด์–ด๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@WillAyd stdlib์˜ string.Template ๊ฐ€ ์ด์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒฌ์žˆ๋Š” ์‚ฌ๋žŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @WillAyd , ๋ช…ํ™•ํžˆ ํ•˜์ง€ ๋ชปํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ์›๋ž˜ ์•„์ด๋””์–ด๋Š” % ๋ฅผ .format ๋ฐ”๊พธ๊ณ  %(XXX)s ์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ _shared_docs ํ…œํ”Œ๋ฆฟ์—์„œ {XXX} ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. @MomIsBestFriend๊ฐ€ ๋งํ–ˆ๋“ฏ์ด string.Template ๋Š” ๋˜ ๋‹ค๋ฅธ ์„ ํƒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋” ๋งŽ์€ ํ† ๋ก ์„ ์œ„ํ•ด ๋ณ„๋„์˜ ๋ฌธ์ œ ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

๋ณต์šฉ:

  • [x] pandas/tests/reshape/test_reshape.py
  • [x] pandas/tests/scalar/period/test_period.py

์ฐธ์กฐ #31412

@MomIsBestFriend ์•ˆ๋…•ํ•˜์„ธ์š”! ์ฒ˜์Œ์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค ๊ธฐ์—ฌ์ž์ž…๋‹ˆ๋‹ค! ์ฒซ PR์ด ๋„ˆ๋ฌด ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค! ๋‹ค์Œ ํŒŒ์ผ ์ž‘์—…์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
versioneer.py
web/pandas_web.py
๊ฐ์‚ฌ ํ•ด์š”!!

@drewseibert versioneer.py๋Š” @MomIsBestFriend ์ด ํ˜ผ๋ž€์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ชฉ๋ก์—์„œ ์ด๊ฒƒ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@jbrockmendel ์•Œ๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ํ•จ๊ป˜ "web/pandas_web.py"๋ผ๊ณ  ์–ธ๊ธ‰ํ•œ ๋‹ค๋ฅธ ํŒŒ์ผ๋„ ์ด๋ฏธ ์ž‘์—…ํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์ž‘์—… ๋ชฉ๋ก์—์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ปค๋ฐ‹์„ ํ‘ธ์‹œํ•˜๋ ค๊ณ  ํ•  ๋•Œ 403 ๊ถŒํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. SSH ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์›๊ฒฉ URL์„ ์„ค์ •ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. SSH ๋˜๋Š” HTTPS๋กœ ๋ณต์ œํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ๊ฐ์‚ฌ ํ•ด์š”!

@MomIsBestFriend ์•ˆ๋…•ํ•˜์„ธ์š”! ์ฒ˜์Œ์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค ๊ธฐ์—ฌ์ž์ž…๋‹ˆ๋‹ค! ์ฒซ PR์ด ๋„ˆ๋ฌด ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค! ๋‹ค์Œ ํŒŒ์ผ ์ž‘์—…์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
versioneer.py
web/pandas_web.py
๊ฐ์‚ฌ ํ•ด์š”!!

ํ–‰์šด์„ ๋นŒ์–ด์š” @drewseibert

๋‚ด๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

pandas/core/reshape/concat.py
pandas/core/reshape/melt.py
pandas/core/reshape/merge.py
pandas/core/reshape/pivot.py
ํŒฌ๋”/์ฝ”์–ด/reshape/reshape.py

์ง€๊ธˆ ์ž‘์—… ์ค‘:

ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/test_pickle.py

์•ˆ๋…•ํ•˜์„ธ์š”
๋‚ด๊ฐ€ ๊ฑธ๋ฆด๊ฑฐ์•ผ

ํŒฌ๋”/์œ ํ‹ธ/_print_versions.py

ํŒฌ๋”/util/_test_decorators.py

https://github.com/pandas-dev/pandas/pull/31628 ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :)

์ €๋Š” pandas/tests/frame/test_repr_info.py ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ: https://github.com/pandas-dev/pandas/pull/31639

์ด๋ด, ๋‚ด๊ฐ€ ๊ฑธ๋ฆด๊ฑฐ์•ผ

  • [ ] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/integer.py

๋ชฉ๋ก์—์„œ ๋‹ค์Œ ํŒŒ์ผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...
web/pandas_web.py
ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/test_pickle.py

๊ฐ์‚ฌ ํ•ด์š”!

ํ™•์ธํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ๊ฒƒ. ํŒŒ์ผ์— f-๋ฌธ์ž์—ด์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_boolean.py

์ด์ œ ์ด๊ฑธ๋กœ ์ž‘์—…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค...

ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_indexing.py

@drewseibert ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์•„์ง ์ž‘์—…์ด ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ๋‹ค

@3vts ๋ฌผ๋ก ์ด์ฃ  :)

๊ฐ€์ ธ๊ฐ€์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”

ํŒฌ๋”/tests/util/test_assert_extension_array_equal.py


๋” ์›ํ•œ๋‹ค๋ฉด LMK.

๋‚ด๊ฐ€ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ์ผ! ๋‚ด ์ฒซ ์˜คํ”ˆ ์†Œ์Šค ๊ธฐ์—ฌ๊ฐ€ ๋  ๊ฒƒ์ด๋ฏ€๋กœ ๋„์›€์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ธฐ์‚ฌ๋ฅผ ๊ธฐ๊ณ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฝ์—ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ.

๋‚ด๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@MomIsBestFriend ๋Š” pandas/tests/util/test_assert_extension_array_equal.py ๊ฐ€ PR #30816 ์—์„œ ์ˆ˜์ •๋œ ๊ฒƒ ๊ฐ™

@3vts @GrizzledLabs - ์œ„ ๋ชฉ๋ก์—์„œ ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ํŒŒ์ผ์„ ์ž์œ ๋กญ๊ฒŒ ๊ฐ€์ ธ์˜ค๊ณ (๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž‘์—…ํ•˜๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธ) - ์ž‘์—… ์ค‘์ธ ์ž‘์—…์— ๋Œ€ํ•ด ์—ฌ๊ธฐ์—์„œ ์˜๊ฒฌ์„ ๋งํ•˜์‹ญ์‹œ์˜ค! ๊ฐ์‚ฌ ํ•ด์š” !

pandas/core/arrays/boolean.py๊ฐ€ ์ด๋ฏธ ์™„๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋†“์นœ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ํ•˜๋‚˜์˜ f'string๊ณผ .format()์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

pandas/core/dtypes/common.py๋„ ์ด๋ฏธ ์™„๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. f'๋ฌธ์ž์—ด์€ ์žˆ์ง€๋งŒ .format() ์—†์Œ

์ด๋Ÿฌํ•œ ์ˆ˜์ • ์‚ฌํ•ญ ์ค‘ ์ผ๋ถ€๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๊ฑธ์ณ ์žˆ์Šต๋‹ˆ๊นŒ? ์ผ๋ถ€๋Š” ๋‹จ์ผ .format()์„ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฉฐ ํŒŒ์ผ ๊ฐ„์— ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์ˆ˜์ •์— ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”, ์ฒ˜์Œ์œผ๋กœ ๊ธฐ์—ฌํ•œ ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค! ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค!
์ฒ˜์Œ์— ๋‚˜๋Š” ์ด๊ฒƒ๋“ค์„ ์ทจํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

ํŒฌ๋”/compat/pickle_compat.py
ํŒฌ๋”/_config/config.py

ํ•˜์ง€๋งŒ ์™„๋ฃŒ๋˜๊ณ  ๋ณ‘ํ•ฉ๋œ ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. @MomIsBestFriend ์ƒ๋‹จ์˜ ๋ชฉ๋ก์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์™„๋ฃŒ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ๋“ค์„ ์ทจํ•  ๊ฒƒ์ด๋‹ค:

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_usecols.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/pytables/conftest.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/pytables/test_store.py

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/pytables/test_timezones.py

@MomIsBestFriend ์Šค๋ ˆ๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜๋Š” ์ค‘ ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ์˜ˆ์™ธ๊ฐ€ ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์ ์šฉ๋˜๋‚˜์š”? ๋˜๋Š” ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•?

๋ฏธ๋ฆฌ ์ •์˜๋œ ๋ฌธ์ž์—ด์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์™„์ „ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. pep 498์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ๋ฌธ์ž์—ด์€ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ์—ฐ๊ฒฐ๋˜๊ณ  f-๋ฌธ์ž์—ด์€ ๋Ÿฐํƒ€์ž„์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

.format() ์˜ ์‚ฌ์šฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค๋ฅธ ๋ฌธ์ž์—ด ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ stdlib์˜ string.Template ๋ฟ์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@jbrockmendel ๋„์™€์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”?

์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹ . ๋‚ด๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  • [ X ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tseries/frequencies/test_inference.py
  • [ X ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/๋ฉ”์†Œ๋“œ/test_argsort.py
  • [ X ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_constructors.py
  • [ X ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์‹ฑ/common.py
  • [ X ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์‹ฑ/test_coercion.py
  • [ X ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์‹ฑ/test_iloc.py
  • [ X ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์‹ฑ/test_indexing.py
  • [ X ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์‹ฑ/test_loc.py
  • [ X ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/common.py
  • [ X ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/datetimelike.py

@monicaw218 , ํŒŒ์ผ ํ•˜๋‚˜๋งŒ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ํ’€ ์š”์ฒญ์ด ๋ณ‘ํ•ฉ๋˜๋ฉด ๋‚˜๋จธ์ง€๋ฅผ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ธฐ์—ฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ˆ์ƒ๋ณด๋‹ค ๊นŒ๋‹ค๋กœ์šฐ๋ฉฐ ์šฐ๋ฆฌ(๊ฒ€ํ† ์ž)์—๊ฒŒ๋Š” ํ’€ ์š”์ฒญ์ด ์ž‘์€ ๊ฒฝ์šฐ์—๋„ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋” ๋งŽ์€ ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ ๊ทœ ๊ธฐ์—ฌ์ž์—๊ฒŒ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ด ๋‘ ํŒŒ์ผ์€ ๋ชฉ๋ก์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ‘
ํŒฌ๋”/io/parsers.py
ํŒฌ๋”/io/pytables.py

๋‹ค์Œ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

ํŒฌ๋”/tests/groupby/test_apply.py
ํŒฌ๋”/tests/groupby/test_bin_groupby.py

#31914์— ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
"pandas/tests/extension/decimal/test_decimal.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/์ธ๋ฑ์‹ฑ/test_categorical.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/๋ฉ”์†Œ๋“œ/test_describe.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/๋ฉ”์†Œ๋“œ/test_duplicated.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/๋ฉ”์†Œ๋“œ/test_to_dict.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_alter_axes.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_api.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_constructors.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/ํ…Œ์ŠคํŠธ_dtypes.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_join.py"

"pandas/io/sas/sas_xport.py"๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

#31933์— ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_operators.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_reshape.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_timeseries.py"
"pandas/tests/indexes/datetimes/test_scalar_compat.py"
"pandas/tests/indexes/datetimes/test_tools.py"
"pandas/tests/indexes/interval/test_indexing.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/๊ฐ„๊ฒฉ/ํ…Œ์ŠคํŠธ_๊ฐ„๊ฒฉ.py"

์ด๋“ค์€ #31945์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

"pandas/tests/indexes/interval/test_setops.py"
"pandas/tests/indexes/multi/test_compat.py"
"pandas/tests/indexes/period/test_constructors.py"
"pandas/tests/indexes/timedeltas/test_constructors.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์‹ฑ/test_floats.py"

์ด๋“ค์€ #31963์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋‚ด๋ถ€/test_internals.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/excel/test_readers.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/io/excel/test_style.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/io/excel/test_writers.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/excel/test_xlrd.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/formats/test_console.py"
"pandas/tests/io/formats/test_to_html.py"
"pandas/tests/io/formats/test_to_latex.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/generate_legacy_storage_files.py"

์ด๋“ค์€ #31967์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

"pandas/tests/io/parser/test_c_parser_only.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/io/ํŒŒ์„œ/test_common.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_compression.py"
"pandas/tests/io/parser/test_encoding.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_multi_thread.py"
"pandas/tests/io/parser/test_na_values.py"
"pandas/test/io/parser/test_parse_dates.py"
"pandas/tests/io/parser/test_read_fwf.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/io/pytables/conftest.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/io/pytables/test_store.py"

์ด๋“ค์€ #31980์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/io/pytables/test_timezones.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/io/test_html.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/test_stata.py"
"pandas/tests/resample/test_period_index.py"
"pandas/tests/reshape/merge/test_join.py"
"pandas/tests/reshape/merge/test_merge.py"
"pandas/tests/reshape/merge/test_merge_asof.py"
"pandas/tests/reshape/test_melt.py"
"pandas/tests/reshape/test_pivot.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์Šค์นผ๋ผ/timedelta/test_constructors.py"

์ด๋“ค์€ #31986์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

"pandas/tests/scalar/timestamp/test_constructors.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/์Šค์นผ๋ผ/ํƒ€์ž„์Šคํƒฌํ”„/test_rendering.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์Šค์นผ๋ผ/ํƒ€์ž„์Šคํƒฌํ”„/test_unary_ops.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/๋ฉ”์†Œ๋“œ/test_nlargest.py"
"pandas/tests/series/test_analytics.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_api.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_dtypes.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_ufunc.py"

์ด https://github.com/pandas-dev/pandas/pull/32007๋กœ ๋‚ด ์ฒซ ๋ฒˆ์งธ pull ์š”์ฒญ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_to_csv.py

์ด๋“ค์€ #32032์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/test_downstream.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/test_multilevel.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋„๊ตฌ/test_numeric.py"
"pandas/tests/tseries/frequencies/test_inference.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tslibs/test_parse_iso8601.py"
"ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ฐฝ/๋ชจ๋ฉ˜ํŠธ/test_moments_rolling.py"

์ด ํŒŒ์ผ์€ #32029์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋ฐฐ์—ด/์นดํ…Œ๊ณ ๋ฆฌ/test_analytics.py

https://github.com/pandas-dev/pandas/pull/32044์— ํฌํ•จ๋œ ํŒŒ์ผ

  • ์Šคํฌ๋ฆฝํŠธ/find_commits_touching_func.py

์ด๋“ค์€ #32034์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

"ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/interval.py"
"ํŒฌ๋”/์ฝ”์–ด/์œ ํ‹ธ/ํ•ด์‹ฑ.py"
"ํŒฌ๋”/io/formats/format.py"
"ํŒฌ๋”/io/formats/html.py"
"pandas/io/formats/latex.py"
"pandas/io/formats/printing.py"
"pandas/io/parsers.py"
"ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/๋ฐฐ์—ด/์นดํ…Œ๊ณ ๋ฆฌ/test_dtypes.py"
"pandas/tests/arrays/categorical/test_operators.py"

์ด๊ฒƒ๋“ค์€ ๋๋‚ฌ์–ด...

ํŒฌ๋”/์ฝ”์–ด/์˜ต์Šค/invalid.py
pandas/core/ops/methods.py
pandas/core/ops/roperator.py

#32063์— ํฌํ•จ๋œ ํŒŒ์ผ:

  • pandas/tests/tseries/frequencies/test_inference.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tslibs/test_parse_iso8601.py

์•ˆ๋…•ํ•˜์„ธ์š”, scripts/validate_docstrings.py๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

pull ์š”์ฒญ์— ํฌํ•จ๋œ ํŒŒ์ผ #32189

  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/datetimes/test_to_period.py

์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ์ด ์Šค๋ ˆ๋“œ ์ƒ๋‹จ์˜ ๋ชฉ๋ก์— ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ํŒŒ์ผ์„๋ณด๊ณ  ์žˆ์—ˆ๋Š”๋ฐ .format() ๋ฌธ์ž์—ด์ด ๋ณ€ํ™˜ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

pandas//util/_decorators.py๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์‹คํŒจํ•œ ์ค„์€ ์ฃผ์„์ž…๋‹ˆ๋‹ค)

pandas//core/indexes/base.py๋ฅผ ํ‘œ์‹œ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์‹คํŒจ๋Š” ๋‹ค์‹œ ์ฃผ์„์—์„œ ๋ฐœ์ƒํ•จ).

์•ˆ๋…•, ๋‚˜๋Š” ๋นจ๋ฆฌ ๋ฌธ์ž์—ด์—์„œ ๋ฌธ์ž์—ด ํ…œํ”Œ๋ฆฟ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ํ•จ๊ป˜ ๋ณด๊ฐ„ ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค ํŒฌ๋” / ์ฝ”์–ด / generic.py๋ณด๊ณ  ์‹œ์ž‘ % ์— string.Template ๋งŽ์€ ์žฅ์†Œ์˜ ๋ณ€ํ™”๋ฅผ ์š”๊ตฌํ•˜๋Š” ๊ณณ Substitute + Appender ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

% ๋ฌธ์ž์—ด ๋ณด๊ฐ„๋ฒ•์˜ ๋ชจ๋“  ์‚ฌ์šฉ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๊ฒฝ์šฐ ์ด ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด % ๋ณด๊ฐ„๋ฒ•์„ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๊นŒ?

@smartvinnetou Appender ๋ฐ Substitute ๊ด€ํ•ด์„œ๋Š” ์ด์ œ doc ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ๊ต์ฒดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. https://github.com/pandas-dev/pandas/issues/31942 ์ฐธ์กฐ

@smartvinnetou Appender ๋ฐ Substitute ๊ด€ํ•ด์„œ๋Š” ์ด์ œ doc ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ๊ต์ฒดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. #31942 ์ฐธ์กฐ

@MomIsBestFriend ์ด ํ‹ฐ์ผ“์—์„œ pandas/core/generic.py ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  #31942์—์„œ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ด์ „ % ๋ณด๊ฐ„์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด generic.py Appender ๋ฐ Subtitute ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ด ํ‹ฐ์ผ“ ์•„๋ž˜์˜ ์ƒˆ doc ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@smartvinnetou Appender ๋ฐ Substitute ๊ด€ํ•ด์„œ๋Š” ์ด์ œ doc ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ๊ต์ฒดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. #31942 ์ฐธ์กฐ

@MomIsBestFriend ์ด ํ‹ฐ์ผ“์—์„œ pandas/core/generic.py ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  #31942์—์„œ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ด์ „ % ๋ณด๊ฐ„์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด generic.py Appender ๋ฐ Subtitute ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ด ํ‹ฐ์ผ“ ์•„๋ž˜์˜ ์ƒˆ doc ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@smartvinnetou pandas/core/generic.py ์˜ ๊ฒฝ์šฐ ์•„๋ž˜ #31942 (๋‚ด๊ฐ€ ์ œ๋Œ€๋กœ ์ดํ•ดํ–ˆ๋‹ค๋ฉด)

์•ˆ๋…•ํ•˜์„ธ์š”, ์™„๋ฃŒ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ ํŒŒ์ผ์„ ๋งŽ์ด ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๊ณ  ์‹ค์ˆ˜๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ์•„์ง ์ž‘์—… ์ค‘์ธ์ง€ ๋ฌป๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ์ €๋„ ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์™„๋ฃŒ๋˜์—ˆ์ง€๋งŒ ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ํŒŒ์ผ ์ค‘ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

  • ํŒฌ๋”/์ฝ”์–ด/generic.py
  • ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/datetimes.py
  • ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/integer.py
  • ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/period.py
  • ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/timedelta.py
  • ํŒฌ๋”/์ฝ”์–ด/config_init.py
  • ํŒฌ๋”/์ฝ”์–ด/dtypes/dtypes.py
  • ํŒฌ๋”/์ฝ”์–ด/frame.py

@sachinh35 ๋ชฉ๋ก์„ ์—…๋ฐ์ดํŠธ ํ–ˆ์Šต๋‹ˆ๋‹ค :)

์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์กŒ๋‹ค

๋ชฉ๋ก์„ ์—…๋ฐ์ดํŠธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! @MomIsBestFriend

pandas/core/ops/ ์•„๋ž˜์˜ ํŒŒ์ผ์— ๋Œ€ํ•ด #32939๋กœ ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด https://github.com/pandas-dev/pandas/blob/master/pandas/core/ops/docstrings.py#L564 ์™€ ๊ฐ™์ด ๋…์ŠคํŠธ๋ง์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋•Œ๋•Œ๋กœ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ๋„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํ•จ์ˆ˜์— ๋ž˜ํ•‘?

๋‚˜๋Š” ๋ณ€ํ–ˆ๋‹ค

  • ํŒฌ๋”/์ฝ”์–ด/sorting.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/datetimes/test_date_range.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/๊ฐ„๊ฒฉ/test_interval.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์‹ฑ/test_coercion.py
  • ํŒฌ๋”/tests/reshape/test_concat.py
  • ํŒฌ๋”/util/_decorators.py

๋‘ ํŒŒ์ผ์ด ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ํŒฌ๋”/_libs/tslibs/timedeltas.pyx
ํŒฌ๋”/_libs/tslibs/timestamps.pyx

๋‹ค์Œ ํ•ญ๋ชฉ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์™„๋ฃŒ๋กœ ํ‘œ์‹œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒฌ๋”/_libs/tslibs/c_timestamp.pyx
ํŒฌ๋”/_libs/tslibs/frequencies.pyx
ํŒฌ๋”/_libs/tslibs/parsing.pyx
ํŒฌ๋”/_libs/tslibs/period.pyx
ํŒฌ๋”/_libs/tslibs/strptime.pyx

์ฐธ๊ณ : ์ด๊ฒƒ์€ ๋‚ด ์ฒซ PR์ž…๋‹ˆ๋‹ค. ๊ฐœ์„ ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

๋ชฉ๋ก์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ผ๋ถ€ ํŒŒ์ผ์„ ํ™•์ธํ•˜๋Š” ์ฃผ์ œ๋ฅผ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ปค๋ฐ‹ ์—†์ด ์™„๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ ํŒŒ์ผ

(์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•  ํ•„์š” ์—†์Œ):

  • [x] ํŒฌ๋”/_config/config.py
  • [x] ํŒฌ๋”/_version.py
  • [x] pandas/compat/pickle_compat.py
  • [x] pandas/core/computation/pytables.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/์ธ๋ฑ์Šค/base.py
  • [x] pandas/core/indexes/multi.py
  • [x] ํŒฌ๋”/์ฝ”์–ด/์ธ๋ฑ์Šค/range.py
  • [x] pandas/core/ops/__init__.py
  • [x] pandas/core/ops/docstrings.py
  • [x] pandas/core/reshape/merge.py
  • [x] pandas/core/tools/datetimes.py
  • [x] ํŒฌ๋”/io/formats/css.py
  • [x] ํŒฌ๋”/io/formats/excel.py
  • [x] ํŒฌ๋”/io/formats/format.py
  • [x] ํŒฌ๋”/io/formats/html.py
  • [x] ํŒฌ๋”/io/formats/info.py
  • [x] ํŒฌ๋”/io/formats/latex.py
  • [x] ํŒฌ๋”/io/formats/printing.py
  • [x] ํŒฌ๋”/io/formats/style.py
  • [x] ํŒฌ๋”/io/parsers.py
  • [x] ํŒฌ๋”/io/pytables.py
  • [x] ํŒฌ๋”/io/sas/sas_xport.py
  • [x] ํŒฌ๋”/io/stata.py
  • [x] pandas/tests/arrays/categorical/test_operators.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋ฐฐ์—ด/test_datetimelike.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/dtypes/test_dtypes.py
  • [x] pandas/tests/extension/base/setitem.py
  • [x] pandas/tests/frame/test_constructors.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_missing.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/ํ”„๋ ˆ์ž„/test_to_csv.py
  • [x] pandas/tests/groupby/aggregate/test_other.py
  • [x] pandas/tests/indexes/datetimes/test_datetime.py
  • [x] pandas/tests/indexes/datetimes/test_formats.py
  • [x] pandas/tests/indexes/datetimes/test_partial_slicing.py
  • [x] pandas/tests/indexes/interval/test_constructors.py
  • [x] pandas/tests/indexes/multi/test_format.py
  • [x] pandas/tests/indexes/period/test_formats.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค/timedeltas/test_timedelta.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์‹ฑ/test_categorical.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/excel/test_openpyxl.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/excel/test_writers.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/formats/test_format.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/formats/test_printing.py
  • [x] ํŒฌ๋”/tests/io/formats/test_style.py
  • [x] ํŒฌ๋”/tests/io/formats/test_to_csv.py
  • [x] ํŒฌ๋”/tests/io/formats/test_to_html.py
  • [x] ํŒฌ๋”/tests/io/formats/test_to_latex.py

ํ™•์ธํ•  ๋‚˜๋จธ์ง€ ํŒŒ์ผ:

  • [ ] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/datetimelike.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_compression.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_encoding.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_header.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_parse_dates.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/parser/test_usecols.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/test_html.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/test_sql.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/test_stata.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๊ฐ์†Œ/test_reductions.py
  • [ ] pandas/tests/reshape/test_melt.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์Šค์นผ๋ผ/๊ธฐ๊ฐ„/test_period.py
  • [ ] pandas/tests/scalar/timedelta/test_timedelta.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์Šค์นผ๋ผ/ํƒ€์ž„์Šคํƒฌํ”„/test_constructors.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_numeric.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_take.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_where.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/๋ฉ”์†Œ๋“œ/test_rename.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_api.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_constructors.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_datetime_values.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_repr.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/test_strings.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋„๊ตฌ/test_to_datetime.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tseries/holiday/test_calendar.py
  • [ ] pandas/tests/tseries/holiday/test_holiday.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tslibs/test_parsing.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์œ ํ‹ธ/ํ…Œ์ŠคํŠธ_assert_frame_equal.py
  • [ ] ํŒฌ๋”/tseries/frequencies.py
  • [ ] ํŒฌ๋”/์œ ํ‹ธ/_test_decorators.py
  • [ ] ํŒฌ๋”/์œ ํ‹ธ/_validators.py

pandas/util/_validators.py . ์ด ๋‹ค๋ฅธ ํŒŒ์ผ๋“ค ์ค‘ ์ƒ๋‹น์ˆ˜๋Š” ์ด๋ฏธ ๋‚˜์—๊ฒŒ๋„ ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • [x] pandas/util/_test_decorators.py
  • [x] ํŒฌ๋”/tseries/frequencies.py
  • [x] pandas/tests/util/test_assert_frame_equal.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tslibs/test_parsing.py
  • [x] pandas/tests/tseries/holiday/test_holiday.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tseries/holiday/test_calendar.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋„๊ตฌ/test_to_datetime.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/test_strings.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_repr.py
  • [x] pandas/tests/series/test_datetime_values.py
  • [x] pandas/tests/series/test_constructors.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_api.py

์•ˆ๋…•ํ•˜์„ธ์š” ๋งˆํ…Œ์˜ค
์ด ๋…ธ๋ ฅ์„ ๋•๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์ง€๋งŒ git ๋ฐ
ํŒ๋‹ค์— ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ €๋ฅผ ์•ˆ๋‚ดํ•ด ์ฃผ์‹ค ์ˆ˜ ์žˆ์œผ์‹ ๊ฐ€์š”?
๋‹จ๊ณ„? ์ด๋ฒˆ ์ฃผ์— ํ™”๋ฉด ๊ณต์œ ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

๊ฐ์‚ฌ ํ•ด์š”,
์•ค๋“œ๋ฅ˜

2020๋…„ 5์›” 26์ผ ํ™”์š”์ผ ์˜คํ›„ 3:12 Matteo Santamaria [email protected]
์ผ๋‹ค:

๋‚˜๋Š” pandas/util/_validators.py๋ฅผ ๋Œ๋ณด์•˜๋‹ค. ์ด๋Ÿฌํ•œ ๋‹ค๋ฅธ ํŒŒ์ผ์˜ ๋Œ€๋ถ€๋ถ„์€
๋‚˜์—๊ฒŒ๋„ ์ด๋ฏธ ๊ดœ์ฐฎ์•„ ๋ณด์ธ๋‹ค.

  • ํŒฌ๋”/util/_test_decorators.py
  • ํŒฌ๋”/tseries/frequencies.py
  • ํŒฌ๋”/tests/util/test_assert_frame_equal.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tslibs/test_parsing.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tseries/holiday/test_holiday.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tseries/holiday/test_calendar.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋„๊ตฌ/test_to_datetime.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/test_strings.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_repr.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_datetime_values.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_constructors.py
  • ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_api.py

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/pandas-dev/pandas/issues/29547#issuecomment-634307953 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/APG73XKAUDLFVVQXUS2SJETRTQ5DDANCNFSM4JLZCU5Q
.

@warden706๋‹˜ , ์ €๋„ ์‚ฌ์‹ค ์—†๋„ค์š” . ์ด ๋ฆฌ์†Œ์Šค๋Š” ๋‚ด๊ฐ€ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์œผ๋ฏ€๋กœ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”,
์—ฌ๊ธฐ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ๋„ ๊ฝค ์ƒˆ๋กญ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋Œ๋ณด๊ณ  ์žˆ์–ด

  • [x] pandas/tests/io/parser/test_header.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/test_sql.py
  • [x] ํŒฌ๋”/tests/io/test_html.py
  • [x] pandas/tests/reductions/test_reductions.py
  • [x] pandas/tests/reshape/test_melt.py
  • [x] pandas/tests/scalar/timedelta/test_timedelta.py

์ด ๋‹ค๋ฅธ ํŒŒ์ผ์„ ํ™•์ธํ–ˆ๋Š”๋ฐ ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • [X] pandas/tests/io/parser/test_compression.py
  • [X] pandas/tests/io/parser/test_encoding.py
  • [X] pandas/tests/io/parser/test_parse_dates.py
  • [X] pandas/tests/io/parser/test_usecols.py
  • [X] ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/io/test_stata.py
  • [X] pandas/tests/scalar/period/test_period.py
  • [X] pandas/tests/scalar/timestamp/test_constructors.py

๋‚˜๋„ ์—ฌ๊ธฐ ์ƒˆ๋กญ๋‹ค.
๋‚ด๊ฐ€ ๊ฐ€์ ธ๊ฐˆ๊ฒŒ

  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_numeric.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_take.py
  • [ ] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_where.py

์ฝ”๋“œ ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, pandas/tests/series/indexing/test_take.py์—์„œ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ:

 msg = "index {} is out of bounds for( axis 0 with)? size 5"
 with pytest.raises(IndexError, match=msg.format(10)):
     ser.take([1, 10])

๊ทธ๋ž˜์„œ ๋‚ด ์ œ์•ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

msg = lambda x: f"index {x} is out of bounds for( axis 0 with)? size 5"
with pytest.raises(IndexError, match=msg(10)):
    ser.take([1, 10])

๊ทธ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”,
PR์„ ํ•˜๊ณ  ์‹ถ์–ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋ช‡ ๋ฒˆ์ด๋‚˜ ์‹คํŒจ๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งˆ์Šคํ„ฐ์—์„œ๋„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
ํŽธ์ง‘๋˜์ง€ ์•Š์€ ๋ถ„๊ธฐ๋œ ๋งˆ์Šคํ„ฐ์—์„œ pytest pandas ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ช‡ ๋ฒˆ์˜ ์‹คํŒจ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๊นŒ?

๋งˆ์Šคํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ฐ€์ ธ์™”๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์–ด๋–ค ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๊นŒ?

@matteosantama ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์„ ๊ฐ€์ ธ pytest pandas ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

================= short test summary info =================
FAILED pandas/tests/io/test_parquet.py::TestParquetFastParquet::test_s3_roundtrip - ValueError: Invalid timestamp "Ven, 29 Mag 2020 07:59:19 GMT": Unknown string format: Ven, 29 Mag 2020 07:59:19 GMT
FAILED pandas/tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz['UTC'] - AttributeError: 'numpy.datetime64' object has no attribute 'hour'
================= 2 failed, 87804 passed, 1185 skipped, 1005 xfailed, 5637 warnings in 2437.06s (0:40:37) =================

๋‹จ์ผ ๋””๋ ‰ํ„ฐ๋ฆฌ(์˜ˆ: pytest pandas/tests/io )์—์„œ๋งŒ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์‹คํŒจ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

 7273 passed, 344 skipped, 53 xfailed, 5584 warnings in 351.76s (0:05:51) 

@OlivierLuG ๋Œ“๊ธ€ ์ดํ›„ ๊ฑฐ์˜ ๋ชจ๋“  ํŒŒ์ผ์ด ์ˆ˜์ •๋˜์—ˆ๊ฑฐ๋‚˜ ์ˆ˜์ • ์—†์ด ์ด๋ฏธ

์ˆ˜์ •๋จ

  • [X] pandas/util/_validators.py
  • [X] pandas/tests/io/parser/test_header.py
  • [X] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/io/test_sql.py
  • [X] pandas/tests/reductions/test_reductions.py

์ˆ˜์ •ํ•  ํ•„์š” ์—†์Œ

  • [X] pandas/util/_test_decorators.py
  • [X] ํŒฌ๋”/tseries/frequencies.py
  • [X] pandas/tests/util/test_assert_frame_equal.py
  • [X] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/tslibs/test_parsing.py
  • [X] pandas/tests/tseries/holiday/test_holiday.py
  • [X] pandas/tests/tseries/holiday/test_calendar.py
  • [X] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/๋„๊ตฌ/test_to_datetime.py
  • [X] ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/test_strings.py
  • [X] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_repr.py
  • [X] pandas/tests/series/test_datetime_values.py
  • [X] pandas/tests/series/test_constructors.py
  • [X] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/test_api.py
  • [X] pandas/tests/io/parser/test_compression.py
  • [X] pandas/tests/io/parser/test_encoding.py
  • [X] pandas/tests/io/parser/test_parse_dates.py
  • [X] pandas/tests/io/parser/test_usecols.py
  • [X] ํŒ๋‹ค/ํ…Œ์ŠคํŠธ/io/test_stata.py
  • [X] pandas/tests/scalar/period/test_period.py
  • [X] pandas/tests/scalar/timestamp/test_constructors.py
  • [X] ํŒฌ๋”/tests/io/test_html.py
  • [X] pandas/tests/reshape/test_melt.py
  • [X] pandas/tests/scalar/timedelta/test_timedelta.py

๊ฒŒ๋‹ค๊ฐ€ ์ด๊ฒƒ๋„ ์ด๋ฏธ ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค

  • [X] ํŒฌ๋”/์ฝ”์–ด/๋ฐฐ์—ด/datetimelike.py
  • [X] pandas/tests/series/methods/test_rename.py

์•„์ง ํ™•์ธ/์ˆ˜์ •

  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_numeric.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_take.py
  • [x] ํŒฌ๋”/ํ…Œ์ŠคํŠธ/์‹œ๋ฆฌ์ฆˆ/์ธ๋ฑ์‹ฑ/test_where.py

@DanBasson ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๋“ค์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ๋ชจ๋ฅด๋Š” ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์–ด๋–ค ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

๋งˆ์Šคํ„ฐ์—์„œ ์ตœ์‹  ์ˆ˜์ • ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ ์ค‘ ์ผ๋ถ€๋ฅผ ๊ณ ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋„์›€์ด๋˜์ง€ ์•Š์•˜๋‹ค.
๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด

pandas/tests/reshape/test_melt.py ์™€ ๊ฐ™์€ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์˜์‹ฌ์ด ๋“ญ๋‹ˆ๋‹ค.

msg = "The following '{Var}' are not present in the DataFrame: {Col}"
...
with pytest.raises(KeyError, match=msg.format(Var="value_vars", Col="\\['C'\\]")):
...
with pytest.raises(KeyError, match=msg.format(Var="id_vars", Col="\\['A'\\]")):
...

๋“ฑ๋“ฑ, msg ๋ฅผ ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  "Col"์˜ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๊ทธ๋Œ€๋กœ ๋‘๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”?

@MatteoFelici ์—…๋ฐ์ดํŠธ๋œ ๋ชฉ๋ก์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ท€ํ•˜๊ฐ€ ํ˜ธ์ถœํ•œ ๋งˆ์ง€๋ง‰ ๋‚จ์€ ๋ช‡ ๊ฐœ์˜ ๋ชจ๋“ˆ์„ ํ™•์ธํ–ˆ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์–ด ๋ณด์ด๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰