<p>pandas.DataFrame.query๋Š” ๊ณต๋ฐฑ์ด ์žˆ๋Š” ์—ด ์ด๋ฆ„์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.</p>

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

์ด๋Ÿฐ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ํ…๋ฐ.

df.query('[col with space] < col')

์—ด ์ด๋ฆ„์— ๊ณต๋ฐฑ์ด ์žˆ๋Š” ๋งŽ์€ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ด ์ด๋ฆ„์„ ๋จผ์ € ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋น ๋ฅธ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

API Design Indexing Reshaping

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

R๊ณผ dplyr๋Š” backtick( `` )์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๋ฐฑ๊ณผ ํŠน์ˆ˜ ๋ฌธ์ž๋กœ ์—ด ์ด๋ฆ„์„ ์ธ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

df$`column with space`
df %>%
    mutate(`column with space` = 1)

query , eval ๋˜๋Š” df. ๋„ํŠธ ๊ตฌ๋ฌธ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ์—ด ์ด๋ฆ„์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๊ฒƒ์„ pandas ํŒŒ์„œ์— ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šด์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

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

ํ . ๋งŽ์€ ๋ฐ์ดํ„ฐ ์„ธํŠธ์— ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ์—ด ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๋ฐ ํ•„์š”ํ•œ ์ฝ”๋“œ ์–‘๊ณผ ์ƒˆ ๊ตฌ๋ฌธ(๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ)์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ฝ”๋“œ ์–‘์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

์—ด ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

cols = df.columns
cols = cols.map(lambda x: x.replace(' ', '_') if isinstance(x, (str, unicode)) else x)
df.columns = cols

์ด๊ฒƒ์€ ์ž˜ ํ…Œ์ŠคํŠธ๋˜์—ˆ์œผ๋ฉฐ ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋” ๋ณต์žกํ•œ ๊ต์ฒด์˜ ๊ฒฝ์šฐ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ๋ฌธ ๋ถ„์„์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์€ ํ›จ์”ฌ ๋œ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

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

ํ–‰๋ณตํ•œ ๋งค์ฒด๋กœ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์—ด ์ด๋ฆ„์„ ์œ ํšจํ•œ Python ์‹๋ณ„์ž๋กœ ๋ฐ”๊พธ๋Š” df = pd.clean_columns(df) ํ•จ์ˆ˜์ด๋ฏ€๋กœ ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ๋ฐ˜ ๋Œ€๊ด„ํ˜ธ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

df.query('(col with space) < col')

์–ด์จŒ๋“ , clean_columns ๋ฐฉ๋ฒ•์€ ๋‚˜์—๊ฒŒ ์ข‹์€ ์ƒ๊ฐ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. read_csv ํ•จ์ˆ˜์˜ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@socheon ์šฐ๋ฆฌ์˜ ๋…ผ์˜๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋กœ ์œ ์ง€ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ์‹œ๋‹ค(์ €๋„ ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค!). read_csv clean_columns ์ธ์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”.

@jreback ์ตœ์ƒ์œ„ clean_columns ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

์—ด ์ด๋ฆ„ ์ฃผ์œ„์— ๋”ฐ์˜ดํ‘œ๋ฅผ ๋„ฃ์œผ๋ฉด ๋งˆ์Šคํ„ฐ์—์„œ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

& ๋ฐ | ์ด๋ฅผ ๋‹จ์ผ ํ† ํฐ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌ๋œ ๋‹ค์Œ ๋‚ด๋ถ€ ์ž„์‹œ๋กœ ๋ฐ”๋€Œ๋ฏ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

df.query("'a column with a space' > 2") -> df.query("tmp_var_str_some_hex_value > 2")

์—ด์ด ๊นจ๋—ํ•œ ๋ฒ„์ „์—์„œ ์ฐธ์กฐ๋˜๋„๋ก ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

df.query("column_with_space > 2")

์˜๋ฏธ๊ฐ€ ์žˆ์„ ๋•Œ๋งˆ๋‹ค ์ž๋™ ์™„์„ฑ์„ ์œ„ํ•ด ์ด ์ •๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ณต๋ฐฑ, ์ , ๋Œ€๊ด„ํ˜ธ ๋ฐ ๊ธฐํƒ€ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ์—ด ์ด๋ฆ„์€ ์„ ํƒ์ ์œผ๋กœ ๋ฐ‘์ค„๊ณผ ๊ฐ™์€ ๋™๋“ฑํ•œ ์œ ํšจํ•œ ๋ฌธ์ž๋กœ ์ž๋™ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ๋„ํŠธ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๊ตฌ์„ฑ์›์œผ๋กœ ์—ด์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”,
์ด ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์„œ์•ฝ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์—ด ์ด๋ฆ„์€ ๋ณด์กดํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒฌ๋”๊ฐ€ ์—ด ์ด๋ฆ„์— ์ž„์˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ IMHO, ์ž˜๋ชป๋œ ์„ค๊ณ„ ๊ฒฐ์ • ๋ฐ ์ž˜๋ชป๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€ํ–‰์ž…๋‹ˆ๋‹ค.

๋ถˆํ‰ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŒ๋‹ค๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ์ œ๋Œ€๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@dgua ์ˆ˜์ •์„ ์œ„ํ•ด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ .query ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋งค์šฐ ๊ตฌ์ฒด์ ์ธ ๋ณด์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์™„์ „ํžˆ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์ฟผ๋ฆฌ ์–ธ์–ด์ฒ˜๋Ÿผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ ํ•ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ๊ถŒ์žฅ๋˜๋Š” ์ธ๋ฑ์‹ฑ์˜ '์ฃผ์š”' ๋ฐฉ๋ฒ•์€ ํ•ญ์ƒ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

In [10]: df = DataFrame({'foo bar': [1, 2, 3, 4]})

In [11]: df[df['foo bar'] > 2]
Out[11]: 
   foo bar
2        3
3        4

jreback, ๋‚˜๋Š” ๋‹น์‹ ์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋” ์‰ฝ๊ณ /๋” ์ฝ๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์—์„œ .query ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด์ œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์—ด ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๋‚œ์ œ์— ์ฒ˜ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.. .

@dgua ๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํ’€ ์š”์ฒญ์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์—†์–ด์š”.

R๊ณผ dplyr๋Š” backtick( `` )์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๋ฐฑ๊ณผ ํŠน์ˆ˜ ๋ฌธ์ž๋กœ ์—ด ์ด๋ฆ„์„ ์ธ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

df$`column with space`
df %>%
    mutate(`column with space` = 1)

query , eval ๋˜๋Š” df. ๋„ํŠธ ๊ตฌ๋ฌธ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ์—ด ์ด๋ฆ„์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๊ฒƒ์„ pandas ํŒŒ์„œ์— ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šด์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” zhiruiwang์˜ ์ œ์•ˆ๊ณผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ํ•˜๋Š” ๊ทธ์˜ upvotes๋ฅผ ๋ณด๊ณ  ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ €๋Š” ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ ์‚ดํŽด๋ณด์•˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ pandas๋Š” ํ‘œํ˜„์‹์— ๋Œ€ํ•ด ์‚ฌ์ „ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ด๋ฅผ numexpr์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์˜†์— ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ์—ด์˜ ์ด๋ฆ„์„ ํฌํ•จํ•˜๋Š” localdict๊ฐ€ ํ•จ๊ป˜ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์—ญ๋”ฐ์˜ดํ‘œ ์•ˆ์˜ ๋ชจ๋“  ๊ณต๋ฐฑ์„ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ(์˜ˆ: "_" ๋˜๋Š” ์ด๋ฆ„ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ)์œผ๋กœ ๋ฐ”๊พธ์–ด ํ‘œํ˜„์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์—ญ๋”ฐ์˜ดํ‘œ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ numexpr์— ๋Œ€ํ•œ ์œ ํšจํ•œ ํ‘œํ˜„์‹์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์˜†์— ์—ด ์ด๋ฆ„์˜ ๊ณต๋ฐฑ์ด ๊ฒฐ๊ตญ localdict๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ™•์ธ์ž์— ์ „๋‹ฌ๋  ๋•Œ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ numexpr์—์„œ ์—ฌ์ „ํžˆ ์˜ฌ๋ฐ”๋ฅธ ์ด๋ฆ„์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์ง€๋งŒ ํ…Œ์ŠคํŠธํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋จผ์ € ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ ์•„์ด๋””์–ด์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€ ๋“ฃ๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

# Don't know if "_" is a good choice and don't know where to place this variable, 
# since it has to be constant in two different files and ideally is only defined once.
SEPERATOR_REPLACING_SPACES = "_"

# Replace spaces in variables surrounded by backticks:
# pandas/pandas/core/computation/expr.py 

import re

...

# new function
def _replace_spaces_backtickvariables(source):
    return re.sub(r'`(.*?)`', 
                  lambda m: m.group(1).replace(" ", SEPERATOR_REPLACING_SPACES), 
                  source)

...

# adjusted function
def _preparse(source, f=compose(_replace_locals, _replace_booleans,
                                _rewrite_assign), g=lambda x: x):
    ...
    g : callable
        This takes a source string and returns an altered one
    ...
    assert callable(g), 'g must be callable'
    source = g(source)

...

# adjusted class
class PandasExprVisitor(BaseExprVisitor):

    def __init__(self, env, engine, parser,
                 preparser=partial(_preparse, 
                                   f=compose(_replace_locals, _replace_booleans)
                                   g=_replace_spaces_backtickvariables)):

# Replace spaces in column names when passed to the localdict:
# pandas/pandas/core/frame.py

# adjusted function
def eval(self, expr, inplace=False, **kwargs):
    ...
    # line 3076
    resolvers = dict((k.replace(" ", SEPERATOR_REPLACING_SPACES), v) 
                     for k, v in self.iteritems()), index_resolvers

ํŽธ์ง‘: _replace_spaces_backtickvariables (์ •๊ทœ์‹์€ ๊ฒŒ์œผ๋ฅธ ์ƒํƒœ์—ฌ์•ผ ํ•จ)

@zhiruiwang df. ๊ตฌ๋ฌธ์€ Python์œผ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„๋˜๋ฏ€๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ query ๋ฐ eval ๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@jreback ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๊ฐ€์žฅ ์ž˜ ์•Œ๊ณ 

์ด์ „ ๋Œ“๊ธ€์—์„œ ์„ค๋ช…ํ•œ ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”?

๋Œ€์‹  ์šฐ๋ฆฌ๋Š” ๋‹ฌ๋ ์ด ์ œ์•ˆํ•œ ๋Œ€๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "๋”ํ‹ฐ" ์ด๋ฆ„์ด "๊นจ๋—ํ•œ" ์ด๋ฆ„์œผ๋กœ ์ฐธ์กฐ๋˜๋„๋ก ํ—ˆ์šฉํ•˜๊ณ ("์ด ์—ด ์ด๋ฆ„"์€ ์—ด์ด ์‹ค์ œ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  "this_column_name"์œผ๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Œ) `` ์บก์Šํ™”๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์ด ํ•œ ์ค„๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. (์ฝ”๋“œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค๋ฉด ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.)

# Replace spaces in column names when passed to the localdict:
# pandas/pandas/core/frame.py

# adjusted function
def eval(self, expr, inplace=False, **kwargs):
    ...
    # line 3076
    resolvers = dict((k.replace(" ", SEPERATOR_REPLACING_SPACES), v) 
                     for k, v in self.iteritems()), index_resolvers

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•ด? ์–ด๋–ค ์ ‘๊ทผ ๋ฐฉ์‹์ด ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ์ข‹์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๊ณต๋ฐฑ ๋ฐ”๊พธ๊ธฐ

df.rename(columns={k: k.replace(' ','_') for k in df.columns if k.count(' ')>0}, inplace=1)

์ˆซ์ž ๊ฐ’์œผ๋กœ ์‹œ์ž‘

df.rename(columns={k: '_'+k for k in df.columns if k[0].isdigit()}, inplace=1)

์ฃ„์†กํ•˜์ง€๋งŒ, ๋งŒ์กฑ์Šค๋Ÿฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์›๋ž˜ ์—ด๋กœ ๋Œ์•„๊ฐ€๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ฉ๋‹ˆ๊นŒ? '_'๊ฐ€ ์—ด ์ด๋ฆ„์˜ ์ผ๋ถ€๋กœ๋„ ์‚ฌ์šฉ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ?

์‚ฌ์šฉ์ž๋Š” ์ด๊ฒƒ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ํŒฌ๋”์˜ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

DG

2019๋…„ 1์›” 19์ผ 11:49์— bscully27 [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ์ข‹์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๊ณต๋ฐฑ ๋ฐ”๊พธ๊ธฐ

df.rename(columns={k: k.replace(' ','_') for k in df.columns if k.count(' ')>0}, inplace=1)

์ˆซ์ž ๊ฐ’์œผ๋กœ ์‹œ์ž‘

df.rename(columns={k: '_'+k for k in df.columns if k[0].isdigit()}, inplace=1)

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/pandas-dev/pandas/issues/6508#issuecomment-455809809 ์—์„œ ํ™•์ธํ•˜๊ฑฐ๋‚˜ https://github.com/notifications/unsubscribe-auth/ ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐ

SQL์—์„œ๋Š” ๋Œ€๊ด„ํ˜ธ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@dgua PR์„ ์ œ์ถœํ•  ์‹œ๊ฐ„์ด ์žˆ์Šต๋‹ˆ๊นŒ? @zhiruiwang ์˜ ๋ฐฑํ‹ฑ ์‚ฌ์šฉ ์ œ์•ˆ์€ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค(์ด๋ฏธ Python 2์—์„œ ์˜๋ฏธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค).

@TomAugspurger ์‹œํ—˜์ด ๋๋‚œ ํ›„ ์‹œ๊ฐ„์ด ์žˆ๊ณ  ์ด๋ฏธ ๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค(์ด์ „ ์˜๊ฒฌ ์ฐธ์กฐ). ์•„์ง ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • SEPERATOR_REPLACING_SPACES ์€(๋Š”) ๋ฌด์—‡์ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๊ฐ€ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ "_"์šฐ๋ฆฌ๊ฐ€ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ, ๋Œ€์‹  ์ข€ ๋” ๋ณต์žกํ•œ ๋Œ€์ฒด ๋ฌธ์ž์—ด, ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ด ์ฐธ์กฐ ํ•  ์ˆ˜์žˆ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด "_"์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋‹ค๋ฅธ ์—ด์„ ๋ฐฉํ•ดํ•˜์ง€๋งŒ, ์ˆ˜ this column name ๋กœ `this column name` _๋ฐ_ this_column_name . (๋ฐฑํ‹ฑ ๊ธฐ๋Šฅ์„ ์‚ญ์ œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

  • SEPERATOR_REPLACING_SPACES ๋Š” ๋‘ ํŒŒ์ผ์— ๊ฑธ์ณ ์ผ๊ด€์„ฑ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์„ ์–ธํ•˜๊ณ  ์ด ํŒŒ์ผ๋กœ ๊ฐ€์ ธ์™€์„œ ๋™์ผํ•œ์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๊ฐ„๋‹จํžˆ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๊นŒ?

  • ๋‚ด๊ฐ€ ๋ณ€๊ฒฝํ•  ์ฝ”๋“œ์—์„œ๋Š” callable() ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. callable() ๋Š” 3.0-3.2์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š”๋ฐ ์ด๊ฒƒ๋„ ๋™์‹œ์— ๊ณ ์ณ์•ผ ํ•˜๋‚˜์š”?

์ด ์ฝ”๋“œ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ ์ „๋ฌธ๊ฐ€์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :)

๋‚ด๊ฐ€ ๋ณ€๊ฒฝํ•  ์ฝ”๋“œ์—์„œ๋Š” callable()์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. callable()์€ 3.0-3.2์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ 3.0 - 3.2? 3.5 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

eval ๋˜๋Š” query ์ปจํ…์ŠคํŠธ์—์„œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑํ‹ฑ ์•„์ด๋””์–ด๊ฐ€ ์˜คํžˆ๋ ค ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋–จ์–ด ๋œจ๋ฆฌ๊ณ  ์‹ถ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜ Python ์ปจํ…์ŠคํŠธ์˜ ๊ฒฝ์šฐ ์ƒˆ ์ด๋ฆ„์—๋Š” ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ ‘๋‘์‚ฌ ๋˜๋Š” ์ ‘๋ฏธ์‚ฌ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋ชจ๋‘ ๋ฐ‘์ค„๋กœ ๋๋‚จ).

์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ ‘๋‘์‚ฌ ๋˜๋Š” ์ ‘๋ฏธ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@beojan ์˜ˆ, ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ "์ถฉ๋Œ"์„ ๊ธฐ๋Šฅ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ `this column name` _and_ this_column_name ๋กœ this column name ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ this column name ๋ฐ this_column_name ๋‘ ๊ฐœ์˜ ์—ด ์ด๋ฆ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์•ฝ๊ฐ„ ์–ด๋ฆฌ์„๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๊ฒฐ์ฝ” ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

this_column_name_ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋‘ ๊ฐœ์˜ ์ถฉ๋Œํ•˜๋Š” ์—ด์ด ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๊ธฐ๋Šฅ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‚ด๊ฐ€ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด :

    "column name" "name"
1   4              5
2   2              1

์ถฉ๋Œ์— ๋Œ€ํ•œ ์กฐ์น˜ ์—†์ด ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ์œผ๋กœ ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

df.query(column_name > 3)

๊ทธ๋ฆฌ๊ณ  pandas๋Š” ์ด ์ฟผ๋ฆฌ์—์„œ ์ž๋™์œผ๋กœ "์—ด ์ด๋ฆ„"์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์•ž์„œ ๋‹ฌ์ •์ด๋„ ์ œ์•ˆํ•œ ๋ฐ” ์žˆ๋‹ค. ์ด์ œ ๋ฐฑํ‹ฑ์— ๋Œ€ํ•œ ์ง€์›์„ ์ƒ๋žตํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๋‹น์‹ ์ด _์•ผ์ƒ์—์„œ_ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋ณผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    "column name" "name" "column_name"
1   3              5     6
2   2              1     9

์ถฉ๋Œ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ œ ์ƒ๊ฐ์—๋Š” ์ถฉ๋Œ์„ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  ์—ด์„ ์ฐธ์กฐํ•˜๋Š” ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ๋ถ€๋ถ„์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ ํฌ์ธํŠธ
PR์€ ๋ชจํ˜ธ์„ฑ์„ ์™„์ „ํžˆ ํ”ผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋งˆ์ง€๋ง‰ ์˜ˆ์ œ๊ฐ€ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2019๋…„ 1์›” 23์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 10์‹œ 56๋ถ„์— hwalinga [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‚ด๊ฐ€ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด :

"column name" "name"

1 4 5
2 2 1

๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ์œผ๋กœ ์ถฉ๋Œ์— ๋Œ€ํ•œ ์กฐ์น˜ ์—†์ด ์ด์ œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋งํ•˜๋‹ค:

df.query(column_name > 3)

๊ทธ๋ฆฌ๊ณ  pandas๋Š” ์ด ์ฟผ๋ฆฌ์—์„œ ์ž๋™์œผ๋กœ "์—ด ์ด๋ฆ„"์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ
dalejung๋„ ์•ž์„œ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ง€์›์„ ๋– ๋‚  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐฑํ‹ฑ ์•„์›ƒ์„ ์œ„ํ•ด.

๋‚˜๋Š” ๋˜ํ•œ ๋‹น์‹ ์ด ์•ผ์ƒ ์—์„œ ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„
์ฒ˜๋Ÿผ:

"column name" "name" "column_name"

1 3 5 6
2 2 1 9

์ถฉ๋Œ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ œ ์ƒ๊ฐ์—๋Š” ์ถฉ๋Œ์„ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์—ด์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

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

@TomAugspurger ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด "_"์™€ ๊ฐ™์€ ์ ‘๋ฏธ์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์—ด ์ด๋ฆ„ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ์„ ๋ณต์žกํ•œ ๋ฌธ์ž์—ด๋กœ ๊ต์ฒดํ•˜์—ฌ ๋” ๋งŽ์€ ์šฐ๋ฐœ์  ์ถฉ๋Œ์„ ๋ฐฐ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ AST์—์„œ ์ง์ ‘ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ด๊ฒƒ๋“ค์ด ์‹ค์ œ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„๋˜์ง€๋งŒ ์žฌ์กฐ๋ฆฝ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

์ด ๊ธฐ๋Šฅ์ด ์ถœ์‹œ๋˜๋Š” ์ผ์ •์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ์ปค๋ฐ‹์„ ๊ฐ์•ˆํ•  ๋•Œ ๋งˆ์Šคํ„ฐ์—์„œ ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ 0.25์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค - 1~2๊ฐœ์›” ํ›„

์žฌ๋ฏธ๋ฅผ ๋ง์น˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์ง€๋งŒ ์‹ค๋ง์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด: Pandas 0.25๋Š” Python3์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://pandas-docs.github.io/pandas-docs-travis/install.html#install -dropping-27๋„ ์ฐธ์กฐ

@jreback ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. 0.25.0 ์ด์ •ํ‘œ๊ฐ€ 5์›” 1์ผ์— ๋งˆ๊ฐ๋˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

@hwalinga ๊ฑฑ์ • ๋งˆ์„ธ์š”. ์ด๊ฒƒ์€ Python3 ์ „์šฉ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ ์ด ํฌํ•จ๋œ ์—ด ์ด๋ฆ„์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ์˜€์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ ์ด๊ฒƒ์ด ํฌํ•จ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ?

@danielhrisca

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

๋‹ค์‹œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”. ๊ทธ๋Ÿฌ๋‚˜ ๊ณต๊ฐ„๊ณผ ๋™์ผํ•œ ์†”๋ฃจ์…˜์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์„ ํŒŒ์ด์ฌ ์†Œ์Šค ์ฝ”๋“œ๋กœ ํŒŒ์‹ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŠน์ • ๊ตฌ๋ฌธ์„ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„ํ•˜๋ ค๋ฉด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ์ด ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ํŒŒ์„œ๋Š” ๊ตฌํ˜„๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@hwalinga HI
๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ ๋‚˜๋Š” ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค

snv_df.query('Gene.refGene in ["MSH2","MSH3","MLH1","MLH3","MSH6","PMS2","PMS3"]'

0.25.0์—์„œ ๋ณ€๊ฒฝํ•œ ์‚ฌํ•ญ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
์ œ์•ˆ์ด ์žˆ์–ด์š”๏ผŒ
perl ์†Œํ”„ํŠธ์›จ์–ด novar์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฝ์—ˆ์„ ๋•Œ 16์ง„์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ˆ˜ ๊ธฐํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
fg

comsic=comsic\x3dxxxxxxxxxxxxxxxxxxx

๊ตฌ๋ฌธ ๋ถ„์„ ์‹œ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ํŠน์ˆ˜ ๊ธฐํ˜ธ์— ํ•ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜ ์‚ฌ์šฉ

@zhaohongqiangsoliva

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

@hwalinga
์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, ์ œ ์˜์–ด๊ฐ€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ๋ฌธ์ œ๋Š” ์—ด ์ด๋ฆ„ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ ๋ฌธ์ œ๊ฐ€ ์ด์ œ ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ๊ธฐํ˜ธ๋Š” ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด

.      /           \     

์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ Hex๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‘ ๋ฒˆ์งธ. ์—ด ์ด๋ฆ„์—๋Š” ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ํ—ˆ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

2019๋…„ 6์›” 22์ผ 18:01์— zhaohongqiangsoliva [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@hwalinga https://github.com/hwalinga
์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, ์ œ ์˜์–ด๊ฐ€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ๋ฌธ์ œ๋Š” ์—ด ์ด๋ฆ„ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ ๋ฌธ์ œ๊ฐ€ ์ด์ œ ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ๊ธฐํ˜ธ๋Š” ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด

. / \
์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ Hex๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ง์ ‘์ด ์ด๋ฉ”์ผ์— ํšŒ์‹  ๋ณผ์„ GitHub์˜์— https://github.com/pandas-dev/pandas/issues/6508?email_source=notifications&email_token=AA5U7NAIAJXVHI7LYXNCGNDP33DO5A5CNFSM4AMXMIT2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODYKUG3I#issuecomment-504709997 , ๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ https://github.com/์„ ์•Œ๋ฆผ/๊ตฌ๋… ์ทจ์†Œ-์ธ์ฆ/AA5U7NCACMBXVVQT7Z4DUE3P33DO5ANCNFSM4AMXMITQ .

@dgua @zhaohongqiangsoliva

๋ฌธ์ œ๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์œ ํšจํ•œ Python ํ‘œํ˜„์‹์ด ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž์— 16์ง„์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์— ๊ณต๋ฐฑ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฏธ ํ† ํฐํ™” ๊ธฐ๋Šฅ( from tokenize import generate_tokens )์— ๋Œ€ํ•œ ํ•ดํ‚น์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์— ๋” ๋งŽ์€ ๋ฌธ์ž๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๋‹ค์‹œ ํ† ํฐํ™” ๊ธฐ๋Šฅ์„ ํ•ดํ‚นํ•˜๋Š” ๊ธฐ๋ฐ˜์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (Pandas๋Š” ์ž์ฒด Python ํŒŒ์„œ ์—ญํ• ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

๋‹น์‹ ์ด ์ด๊ฒƒ์„ ์ •๋ง๋กœ ์›ํ•œ๋‹ค๋ฉด, ๋‹น์‹ ์€ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์—ด ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹น์‹ ์ด ๋ฌธ์ œ์— ๋‚˜๋ฅผ ํƒœ๊ทธํ•˜๋ฉด ๋‚˜๋Š” ์œ ์ง€ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋‚ด ์†”๋ฃจ์…˜์„ ์„ค๋ช…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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