본문 바로가기

Pandas/기초

(32)
판다스 - 파일경로에 한글이 있어 에러가 발생한 경우 read_excel이나 read_csv를 이용할 때 경로명에 한글명 폴더가 있는 경우가 많다. 이럴 때 간혹 에러가 발생하는데, 이때 engine 옵션에 python을 값으로 넣어주면 정상 작동한다. 같은 폴더에 있는 경우 이는 문제가 별로 없다. 한글명 폴더에 데이터가 있는 경우 engine='python'을 넣어준다. 물론 항상 에러가 나는 것은 아니니 기억해두고 활용하면 된다.
판다스 - skiprows 엑셀(또는 csv)파일 등을 읽어올 때 간혹 컬럼에서 이슈가 생길 때가 있다. 우선 전체 엑셀 파일을 예시로 만들어서 보면 1번행에 표 제목이 있고 2번행부터 컬럼이 시작된다. 이를 데이터프레임으로 불러와보자 딱 보기에도 문제가 있다. 원인은 표 제목인 엑셀의 1번행을 컬럼으로 가져왔기 때문이다. 이때 사용하는 것이 바로 skiprows이다. 엑셀의 1번행 → 판다스의 컬럼 판다스는 0부터 시작 위 원리를 이해하고 skiprows에, 0을 넣은 배열을 넘긴다. 엑셀의 1번행을 생략하니 == skiprows=[0] 엑셀의 2번행이 판다스의 컬럼이 되었다.
판다스 - 길이가 긴 데이터를 에러 없이 엑셀로 저장하기 : ExcelWriter 데이터프레임 위와 같은 데이터프레임의 컬럼을 보자 컬럼 중 url의 데이터가 너무 길다. 그래서 pd.to_excel을 이용하면 에러메세지가 뜬다. 실제로 Nike 엑셀 파일에 들어가봐도 url 컬럼은 비어 있다. 이럴 때 사용하는 것이 바로 ExcelWriter이다. ExcelWriter pd.ExcelWriter의 옵션 중 strings_to_urls 를 False로 준다. 이러면 아무 에러가 뜨지 않는다. Nike 엑셀 파일에 가서 확인해보면 url이 잘 저장되었다. ** 팁 데이터프레임.to_excel()에서 index=False를 주면 불필요한 인덱스까지 저장하지 않게 된다.
판다스 - 원하는 위치에 컬럼(열) 추가 : insert 데이터프레임.insert(원하는 컬럼의 위치, 새롭게 들어갈 컬럼의 이름, 조건) - 컬럼의 위치는 0부터 시작 - 조건을 변수에 넣어서도 이용 가능 데이터 불러오기 [목표 : weight 컬럼 옆에 weight 컬럼을 정규화한 컬럼을 추가] 우선 무게 컬럼의 최대값으로 각 값들을 나눠주자 최대값은 5140이며 이를 이용해 weight 컬럼을 나눠주면 정규화된 시리즈를 얻을 수 있다. 보통 컬럼을 추가하면 기존 데이터프레임의 맨 끝에 붙지만 지금은 insert를 이용해보자 6번째 컬럼 위치에 weight_norm이라는 이름의 컬럼을 추가 했고 이는 정규화된 값들이다. -----------------------------------------------------------------------------..
판다스 - 인덱스, 컬럼(열) 이름 변경 : rename 데이터 만들기 행 인덱스 이름 변경 - DataFrame.rename({기존 인덱스: 새 인덱스}, axis=0) - DataFrame.rename({기존 인덱스: 새 인덱스}, axis='index') - DataFrame.rename(index={기존 인덱스: 새 인덱스}) 열 이름 변경 - DataFrame.rename({기존 컬럼명: 새 컬럼명}, axis=1) - DataFrame.rename ({기존 컬럼명: 새 컬럼명}, axis='columns') - DataFrame.rename (columns={기존 컬럼명: 새 컬럼명}) 행 인덱스 이름 변경 DataFrame.rename({기존 인덱스: 새 인덱스}, axis=0) DataFrame.rename({기존 인덱스: 새 인덱스}, axis..
판다스 - reindex() reindex() 메서드를 사용하면 데이터프레임의 행/열 인덱스를 새로운 배열로 재지정할 수 있다. 기존 객체를 변경하지 않고 새로운 데이터프레임 객체를 반환한다. 데이터 생성하기 위 df의 (행)인덱스는 r1, r2, r3이다 이를 바꾸려면 새로운 배열을 reindex에 넣어준다. 기존 데이터프레임에 존재하지 않는 행 인덱스가 새롭게 추가되는 경우 그 행의 데이터 값은 NaN이 된다. fill_value NaN 대신에 유효한 값을 넣기 위해선 fill_value 옵션에 원하는 값을 넣어준다. 사실 reindex는 행이나 컬럼 추출할 때도 활용할 수 있다. reindex로 행 추출 reindex(기존 인덱스) 기존에 있는 인덱스를 넣어주면 행 추출처럼 된다. 사실 loc를 이용해 동일한 결과를 낼 수 있..
판다스 - stack, unstack 데이터를 생성해서 살펴보자 stack 이 result를 다시 unstack을 하게 되면 가장 안쪽의 레벨부터 끄집어낸다. 숫자 또는 이름을 전달할 수도 있다. 바깥쪽 레벨을 꺼내려면 레벨을 넣어주면 된다. 이름을 넣어도 동일한 결과가 나온다. 데이터프레임의 unstack 데이터프레임을 unstack할 때 unstack 레벨은 결과에서 가장 낮은 단계가 된다. 컬럼의 레벨 1로 unstack되었다.
판다스 - set_index(), reset_index() set_index() - 하나 이상의 컬럼을 색인으로 하는 새로운 DataFrame을 생성한다. reset_index() - 계층적 색인의 단계가 컬럼으로 이동한다. 판다스 데이터프레임에서 인덱스를 설정하는 법은 여러가지가 있다. 지금은 크게 두가지로 살펴보겠다. 데이터 만들기 인덱스 만들기 1. 데이터프레임의 인덱스 = 데이터프레임의 컬럼 Alpha 컬럼이 인덱스로 설정 됐다. 단, 이 방법의 단점은 인덱스와 같은 컬럼이 중복 된다는 것이다. 이렇게 되면 reset_index를 사용할 때 에러가 발생한다. 이미 Alpha 컬럼이 있다는 ValueError가 떴다. 따라서 중복컬럼이 굳이 필요 없다면 Alpha 컬럼을 삭제한 다음 reset_index를 실행하면 에러가 발생하지 않는다. 혹은 중복 컬럼 ..