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 : 활성화된 창 하나만 캡쳐)