2021년 32주차 기록
2021.08.09
operator_precedence pandas dataframe
08/09 (월) ~ 08/15 (일)
- Python의 Operator precedence
- dictionary Comprehension의 특이 사례
- pandas Dataframe Cell에 List 값을 Value로 넣기
- 읽는 책
- 관심주제
Python의 Operator precedence
- #operator_precednce
- 다음과 같은 조건문을 사용하려고 하는데 연산자 우선순위가 맞나?
1 2 3
# 의도: a_file 이나 b_file이 아직 준비가 안되었으면 do_something()을 수행하자 if not is_ready.a_file or not is_ready.b_file: do_something()
- 해답은 Operator Precedence, docs.python.org 에 있다.
-
not
의 우선순위가or
보다 높으므로 위 예제는 의도대로 수행된다
dictionary Comprehension의 특이 사례
pandas Dataframe Cell에 List 값을 Value로 넣기
- #pandas #dataframe
- 참조링크 : Add List as value in pandas Dataframe, stackoverflow
예제
-
다음과 같은 Dataframe을 만들고 싶다
남산도서관 양천도서관 동작도서관 9783478 [‘1234’, ‘4567’] [‘5678’] NaN - 흔히 범하는 실패 사례 1 : index 설정 오류 ( TypeError: ~ )
1 2 3 4 5
lib_dict = {'남산도서관': ['1234', '4567'], '양천도서관': ['5678']} df = pd.DataFrame(lib_dict, index='9783478', columns=['남산도서관', '양천도서관', '동작도서관']) >>> .... TypeError: Index( ... ) must be called with a collection of some kind, '97834578' was passed
-
pandas.DataFrame API reference를 참조해보면
index or array-like
라고 되어있다 - pd.Index 형식이나 배열을 넘기라는 얘기. 한 줄이라도
['97834578']
처럼 list로 감싸서 보내야함
-
pandas.DataFrame API reference를 참조해보면
- 흔히 범하는 실패 사례 2 : value 설정 오류 ( ValueError: ~ )
1 2 3 4 5
lib_dict = {'남산도서관': ['1234', '4567'], '양천도서관': ['5678']} df = pd.DataFrame(lib_dict, index=['9783478'], columns=['남산도서관', '양천도서관', '동작도서관']) >>> .... ValueError: Shape of passed values is (2, 3), indices imply (1, 3)
- Add List as value in pandas Dataframe, stackoverflow를 참조
-
일단 아래와 같은 형식을 만들려면
lib_dict
를 어떻게 구성했을지 생각해보자남산도서관 양천도서관 동작도서관 9783478 ‘1234’ ‘5678’ NaN 9783459 ‘4567’ NaN NaN - 아마 위의 코드에서 index만 고쳐주면 된다. 즉 현재
lib_dict
설정이 원래 의도와는 다르다. - 현재 pandas에서 값으로만 판단했을때 index=2개 , columns=3개 형식 으로 판단하고 있음
- 아마 위의 코드에서 index만 고쳐주면 된다. 즉 현재
- 그런데 index 형식은 index=1개, columns=3개로 넘겨줘서 서로 형식이 안 맞는다며 불평하는 것임
- 원래 원하던 형식이 [‘1234’, ‘4567’] 을 하나의 값으로 보는 것 이었으므로
- 겉으로 봐서 한 개처럼 보이게 만들어줘야 함
- 즉,
[]
으로 한 번 더 감싸줘야 함
- 최종 형태
1 2 3 4 5 6 7
lib_dict = {'남산도서관': [ ['1234', '4567'] ], '양천도서관': [ ['5678'] ]} df = pd.DataFrame(lib_dict, index=['9783478'], columns=['남산도서관', '양천도서관', '동작도서관']) with dataframe_print_option: print(df) >>> 남산도서관 양천도서관 동작도서관 97834578 [1234, 4567] [5678] NaN
읽는 책
Fluent Python
- This phrase takes time but eventually gets to the point.
- 저자 : 루시아누 하말류, 브라질 프로그래머
- 책에 언급된 주제들
- Alex Mrtelli, stackOverflow
- 감사의 글에 언급된 요제프 하르트비히의 체스판
- 1장에서 나온 짐 허구닌 Jim Hugunin
관심주제
- Vim Text Objects: The Definitive Guide, blog.carbonfive.com
- PyCharm에서 좀 더 Vim 기능을 많이 쓰기 위해 JetBrains/ideavim 방문
- Setup 섹션에 XDG standard를 지원한다고 한다
- Vim에서 PyCharm 처럼 class outline을 보고싶을때 : Tagbar: a class outline viewer for Vim
- Dependencies에 Exuberant Ctags 와 Universl Ctags 얘기가 나옴
- 이글로 유추해보면 Universal Ctags는 유지보수는 되는 Exuberant Ctags 의 후손이며
- Exuberant Ctags 2009년 이후로 유지보수가 멈춘듯 하다
- johngrib 블로그에 ctags 명령어 글이 있다