스프레드시트를 데이터 프레임으로
Pandas 라이브러리는 Python에서 데이터 분석 및 처리에 사용되는 라이브러리입니다. Pandas를 사용하면 스프레드시트 형식 파일(.csv, .xlsx 등)을 DataFrames에 쉽게 로드할 수 있습니다. 데이터 프레임은 Pandas에서 제공하는 2차원 테이블 형식의 데이터 구조입니다.
먼저 Pandas를 설치하고 로드하여 사용해야 합니다. Pandas를 설치하려면 터미널에서 다음 명령을 실행하십시오.
pip install pandas
이제 팬더를 불러오고 스프레드시트 파일을 로드하는 방법을 살펴보겠습니다.
CSV 파일 로드
CSV(쉼표로 구분된 값) 파일은 데이터를 쉼표로 구분된 값으로 저장하는 파일 형식입니다. 판다의 read_csv 함수를 사용하여 CSV 파일을 데이터 프레임에 로드할 수 있습니다.
import pandas as pd
# CSV 파일을 데이터프레임으로 로드하기
df = pd.read_csv('파일경로/파일이름.csv')
# 데이터프레임 내용 출력
print(df.head())
엑셀 파일 불러오기
Excel 파일(.xlsx)은 Microsoft Excel에서 사용하는 스프레드시트 파일 형식입니다. 판다의 read_excel 함수를 사용하여 Excel 파일을 데이터 프레임에 로드할 수 있습니다. 이 기능을 사용하려면 openpyxl 패키지도 설치해야 합니다.
pip install openpyxl
이제 Excel 파일을 DataFrame으로 로드할 수 있습니다.
import pandas as pd
# Excel 파일을 데이터프레임으로 로드하기
df = pd.read_excel('파일경로/파일이름.xlsx', engine="openpyxl")
# 데이터프레임 내용 출력
print(df.head())
위의 예제 코드를 사용하여 스프레드시트 형식의 파일을 pandas 데이터 프레임으로 로드할 수 있습니다. 이렇게 로드된 데이터 프레임은 필요에 따라 데이터 처리, 분석, 시각화 등에 사용할 수 있습니다.
유니코드디코드오류
**UnicodeDecodeError**는 파일의 인코딩이 올바르지 않을 때 발생하는 오류입니다. 대부분의 경우 한글과 같은 문자가 포함된 파일을 읽을 때 이 오류가 발생합니다. 이 문제를 해결하려면 파일을 로드할 때 올바른 인코딩을 지정해야 합니다.
대부분의 경우에 한글이 포함된 파일은 ‘utf-8’ 또는 ‘cp949′(EUC-KR 확장 인코딩) 인코딩을 사용합니다.하다. pd.read_csv() 기능에 부호화 매개변수를 추가하여 인코딩을 지정할 수 있습니다.
예를 들어 ‘cp949’ 인코딩으로 CSV 파일을 로드하려면 다음 코드를 사용합니다.
import pandas as pd
# 'cp949' 인코딩으로 CSV 파일을 데이터프레임으로 로드하기
df = pd.read_csv('국민연금공단_국내주식 투자정보_20211231.csv', encoding='cp949')
# 데이터프레임 내용 출력
print(df.head())
‘utf-8’ 인코딩을 시도하려면 다음 코드를 사용하십시오.
import pandas as pd
# 'utf-8' 인코딩으로 CSV 파일을 데이터프레임으로 로드하기
df = pd.read_csv('국민연금공단_국내주식 투자정보_20211231.csv', encoding='utf-8')
# 데이터프레임 내용 출력
print(df.head())
인코딩에 여전히 문제가 있으면 다른 인코딩을 시도할 수 있습니다. 인코딩 문제가 해결되면 데이터 프레임이 정상적으로 로드되고 출력됩니다.
특정 컬럼의 데이터만 추출
# '컬럼이름' 컬럼 데이터만 추출
specific_column = df('컬럼이름')
print(specific_column)
위 코드에서 ‘열 이름’ 부분에 추출하려는 특정 열의 이름을 입력합니다. 이렇게 추출된 특정 칼럼의 데이터는 Series 객체로 반환된다.
추출할 컬럼이 여러 개인 경우 다음과 같이 컬럼 이름을 목록으로 입력합니다.
# '컬럼1', '컬럼2' 컬럼 데이터만 추출
specific_columns = df(('컬럼1', '컬럼2'))
print(specific_columns)
위의 코드에서는 2개의 컬럼을 리스트로 입력하고 2개의 컬럼 데이터를 추출합니다. 추출된 데이터는 DataFrame 객체로 반환됩니다.
ValueError: 값 길이(5)가 인덱스 길이와 일치하지 않습니다(1249).
ValueError Traceback(가장 최근 호출 마지막)
ValueError: Length of values (5) does not match length of index (1249) 오류가 발생하는 이유는 새 열에 추가하는 데이터의 길이가 데이터 프레임의 길이와 일치하지 않기 때문입니다. 데이터 프레임의 길이는 행의 수를 나타냅니다. 따라서 오류를 수정하려면 데이터 프레임과 일치하도록 추가하는 데이터의 길이를 변경해야 합니다.
다음과 같이 데이터 프레임과 일치하도록 추가하려는 데이터의 길이를 수정하여 새 열을 추가할 수 있습니다.
# 데이터프레임에서 특정 열(column) 추출하기
specific_columns = df(('종목명', '자산군 내 비중(퍼센트)', '지분율(퍼센트)'))
# 새로운 열(column) 추가하기
specific_columns('새로운 열 이름') = (1) * len(specific_columns)
print(specific_columns)
위 코드에서 (1) * len(specific_columns)에 추가할 데이터를 데이터 프레임의 길이에 맞게 수정하여 새로운 컬럼을 추가합니다. 이와 같이 새 열을 추가하면 데이터 프레임에 존재하는 모든 행에 대해 해당 열의 값을 갖게 됩니다.
SettingWithCopyWarning
설명서의 주의 사항을 참조하십시오. https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy specific_columns(‘새 열 이름’) = (1) * len(specific_columns)
위의 경고 메시지는 데이터 프레임에서 특정 컬럼을 추출한 후 결과를 바탕으로 새로운 컬럼을 추가할 때 발생할 수 있는 경고 메시지입니다. 이 경고 메시지는 데이터 프레임을 조작할 때 일반적인 경고 메시지입니다.
경고 메시지를 해결하려면 데이터 프레임에서 특정 열을 추출할 때 .loc() 또는 .iloc() 메서드를 사용하여 복사본을 만든 다음 복사본을 수정해야 합니다.
다음과 같이 .loc() 메서드를 사용하여 복사본을 만들고 복사본을 수정하는 동안 새 열을 추가할 수 있습니다.
# 데이터프레임에서 특정 열(column) 추출하기
specific_columns = df.loc(:, ('종목명', '자산군 내 비중(퍼센트)', '지분율(퍼센트)')).copy()
# 새로운 열(column) 추가하기
specific_columns('새로운 열 이름') = (1) * len(specific_columns)
print(specific_columns)
위의 코드에서 .loc() 메소드를 사용하여 특정 컬럼을 추출한 후 추출된 사본을 .copy() 메소드를 사용하여 복사합니다. 그런 다음 복사본을 수정하여 새 열을 추가했습니다. 이와 같이 새 열을 추가하면 데이터 프레임에 존재하는 모든 행에 대해 해당 열의 값을 갖게 됩니다.
이와 같이 데이터 프레임을 조작할 때 발생하는 경고 메시지를 무시해도 나쁠 것은 없습니다. 그러나 경고 메시지가 발생하는 이유를 이해하고 가능한 한 최선을 다해 해결하는 것이 좋습니다.