2019-03-10

Pandas를 쓰다가 찾게 된 것들

0. 엑셀 쓰면 되는거 아닌가? 왜 Pandas같은걸 쓰는거지?

싶다가..

강력한 파이썬의 기능들을 응용할 수 있다는 점, 내가 맘대로 데이터를 주무를 수 있다는 점 등등 때문에 결국 Pandas를 사용하게 되었다.

기본적인 사용법들이라면 적지 않아도 될 것만 같다. 개인적으로 공부하기 위해 남겨두는 글이기도 하거니와, 누군가가 찾으려 하거든 이 게시물에서 얻어갈 수 있다면 참 좋겠다는 생각으로 공개해둡니다. 열공하세요.



1. print(df) 에서 ...으로 생략되는거 없애고 전부 출력하기.

(문제는 생략됨에 있었다)

실은 저 사이에 column name에 'name'이나 'category'등이 들어가야 할 판이다. 근데 전부 생략되어버렸다. 이럴 땐 아래와 같은 간단한 옵션을 추가해서 바꿀 수 있다.

import pandas as pd

# 최대 줄 수 설정
pd.set_option('display.max_rows', 500)
# 최대 열 수 설정
pd.set_option('display.max_columns', 500)
# 표시할 가로의 길이
pd.set_option('display.width', 1000)

표시할 가로의 길이는 character의 개수로 나타내는 것 같다. 자세한 내용은 판다스 홈페이지에서 찾아볼 수 있다.

+추가:

이보다 편리한 방법이 있다.
pd.describe_option() 을 출력해보면 해당 DataFrame의 옵션을 모두 볼 수 있다.

(pd.describe_option()을 실행한 모습)

Column에 표시되는 내용 또한 '...'으로 생략되어버리는 경우가 있었기에 찾아보다가, 이런 내용이 있는 것을 발견했다. 이거 하나면 모든 설정을 할 수 있을 것만 같다!
옵션에 대한 현재값을 얻을 땐 pd.get_option()을 사용하고, 설정값을 넣을 땐 pd.set_option()을 사용하면 된다.


2. Column 정렬 순서 바꾸기

(이렇게 나온다.)

그런데 나는 A, C, B, D 순서로 만들고 싶다. 그렇다면 아래와 같이 새로운 인덱스로 정의해서 출력해버리면 된다.

(B와 C의 순서가 바뀌었다.)

개수가 적을 때에나 사용하기 좋은 방식 아닐까.. 나중에 알게 되면 추가할 것.



3. pd.read_csv('data.csv') 에서 UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 1-2: invalid continuation byte 라고 에러가 뜬다.

간단하다.

with open('file_name.csv') as f:
    print(f)

불러온 객체를 그대로 print()

<_io .textiowrapper="" encoding="utf8" mode="r" name="file_name.csv">

와 같이 인코딩을 그대로 보여주는 경우들도 두루 있다.

그런데

간혹 인코딩이 보이지 않는 경우도 있다. 그럴 땐

from encodings.aliases import aliases
alias_values = set(aliases.values())

for encoding in set(aliases.values()):
    try:
        df=pd.read_csv("test.csv", encoding=encoding)
        print('successful', encoding)
    except:
        pass

위와 같이 인코딩 생략형들을 전부 불러와서

Exception이 생기지 않는 인코딩을 쓰면 된다.

필자의 경우엔

pd.read_csv('data.csv', encoding="ISO-8859-1")

위의 코드처럼 라틴 알파벳을 포함하는 csv파일을

ISO 규격으로 read해서 사용한 경험이 있다.



4. 인접한 row가 같은 값일 때에만 묶어서 더하기


위의 df는 user와 location이 동일하고, 서로 인접해 있을 때에만

duration을 합하고 싶다는 질문글이다.

이 정렬의 특징은

3번째 열과 5~6번째 열이 같은 'location', 같은 'user'임에도

서로 '인접(adjacent)'해있지 않아서

duration이 합해지지 않은 것이 핵심이다.

이 문제는 다음의 코드로 해결할 수 있다.

adj_check = (df.location != df.location.shift()).cumsum()
df.groupby(['user', 'location', adj_check], as_index=False, sort=False)['duration'].sum()


코드 해석 -

- 일단 sort=False로 지정하여 원본 DF의 순서가 정렬되어버리지 않도록 한다.

그런 다음 합산하고자 하는 'duration' column을 계산한다.


























내가 쓸 pandas method 모음집

0. 자주 쓰였던 명령어를 정리하는 차원에서 기록해보았다.

개인적인 취향으로 정리했기 때문에 '이게 통상적으로 많이 쓰이는가'라는

추리는 하지 마시길..




  • df.head()
처음 5행을 출력한다. df.head(1000)은 1000줄을 출력한다.

  • df.tail()
마지막 5행을 출력한다.

  • df.name
'name'이라는 이름의 column을 Series 객체로 반환한다. Column 이름이 'moldb_smiles'라면 df.moldb_smiles라고 쓰면 된다.

  • df[:2]
파이썬에서 인덱싱, 슬라이싱하는 것처럼 사용하면 된다. 특정 행을 가져온다.

  • df[(df.moldb_average_mass <= 500) & (df.moldb_average_mass > 100)]
DataFrame의 moldb_average_mass의 값이 100 초과 500 이하인 값을 가져온다.
요렇게 하면 안된다 :
df[100 < df.moldb_average_mass <= 500]
df[[df.moldb_average_mass <= 500] & [df.moldb_average_mass > 100]]
df[(df.moldb_average_mass <= 500) and (df.moldb_average_mass > 100)]



df.iloc[:, 0:2]
첫 번째 인자는 row의 범위를 지정하고, 두 번째 인자는 column의 범위를 지정해 해당 범위만큼 가져온다.
예시에서 [:, 0:2]의 범위는 'row는 0부터 끝까지, column은 0번째부터 2번째 미만까지'를 나타낸다.





2019-03-06

윈도우 10 그림판의 단축키

-1. 만약 윈도우 10을 쓰는데 Print Screen키로 캡처한 이미지를 그림판에서 작업한다면

Shift + Win key + S 를 눌러보는 것을 추천한다.

윈도우 10에 내장된 캡처도구이다.



0. 그림판은 윈도우 10에 내장되어있는 그래픽 툴이다.

단축키를 이용하면 평소 작업이 아주 조금 더 빨라질 수 있다.

꿀이 될만한 단축키엔 밑줄을 그어두었다.



1. Ctrl 사용

Ctrl + A : 캔버스 전체 선택
Ctrl + C : 선택한 영역 복사
Ctrl + X : 선택한 영역 자르기
Ctrl + V : 클립보드의 데이터를 붙여넣기

Ctrl + Z : 마지막 작업 취소하기(되돌리기)
Ctrl + Y : 취소한 작업 다시 하기

Ctrl + E : 이미지 속성 보기
Ctrl + G : 격자 보기(토글)

Ctrl + P : 사진 인쇄하기
Ctrl + R : 눈금자 보기(토글)
Ctrl + W : 크기조정 상자 열기

Ctrl + N : 새 파일 열기
Ctrl + O : 파일 열기
Ctrl + S : 저장하기

Ctrl + Page Up : 확대(줌 인)
Ctrl + Page Down : 축소(줌 아웃)
(위의 두개보단 Ctrl 누른 채 마우스 휠을 올리고 내리는 편이 더 편하다.)

Ctrl + B : 선택한 텍스트를 볼드체(Bold)로 만들기
Ctrl + I : 선택한 텍스트를 이탤릭체(Italics)로 만들기
Ctrl + U : 선택한 텍스트에 밑줄(Underline) 치기

Ctrl + (NumPad) '+' : 선택한 영역만 크기 키우기
Ctrl + (NumPad) '-' : 선택한 영역만 크기 줄이기
(영역 선택 후 Ctrl + '-'를 두어번 누른 뒤
다시 Ctrl + '+'를 두어번 눌러주면
자체 모자이크 효과를 낼 수 있다(...))



2. Alt 사용

Alt + F : 파일 메뉴 열기
Alt + H : 키 도움말 열기(아래 사진 참조)
Alt + V : 보기 탭으로 이동
Alt + F4 : 창 닫기
Alt + Esc : 그림판 인터페이스를 최소화하기
Alt + 스페이스바 : 제목에 우클릭한 효과

(키 도움말: 마우스로 클릭하지 않아도 해당 키를 눌러서 선택이 가능하다.)



3. 기능키 사용

F1 : 그림판 도움말 열기
F11 : 전체화면으로 그림 보기
F12 : 다른 이름으로 파일 저장
F10 : Alt + H와 같은 효과. 키 도움말 열기.



4. 방향키 사용

→ : 선택한 영역을 오른쪽으로 1 픽셀 이동
← : 선택한 영역을 왼쪽으로 1 픽셀 이동
↑ : 선택한 영역을 위로 1 픽셀 이동
↓ : 선택한 영역을 아래로 1 픽셀 이동



5. 기타 등등

Esc : 선택 취소
Delete : 선택한 영역 지우기
Prt scr : 말이 필요 없다.
(Alt + Prt scr : 활성화된 창 하나만 캡쳐)