싶다가..
강력한 파이썬의 기능들을 응용할 수 있다는 점, 내가 맘대로 데이터를 주무를 수 있다는 점 등등 때문에 결국 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가 같은 값일 때에만 묶어서 더하기
↓
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을 계산한다.
댓글 없음:
댓글 쓰기