데이터 탐색

유성·2024년 11월 3일

데이터분석

목록 보기
5/5

CSV 파일 불러오기 및 인코딩

파일을 불러올 때, 인코딩 방식이 맞지 않으면 파일을 읽을 때 오류가 발생할 수 있습니다. 한국어가 포함된 CSV 파일은 CP949 또는 EUC-KR 인코딩을 사용하는 경우가 많습니다.

# CSV 파일 불러오기
df = pd.read_csv('경로/파일이름.csv', encoding='cp949')

# 데이터 확인
print(df.head())  # 상위 5개 행 확인

일반적으로 사용하는 인코딩 방식은 다음과 같습니다:

  • UTF-8: 전 세계적으로 가장 많이 사용되는 인코딩 방식.
  • CP949: 마이크로소프트에서 개발한 한국어 인코딩 방식.
  • UTF-8-SIG: UTF-8에서 BOM(Byte Order Mark)이 포함된 형식.

df.info()로 데이터프레임 정보 확인하기

  • df.info() 메서드를 사용하면 데이터프레임의 전체적인 정보를 확인할 수 있습니다.
  • Non-null count: 각 컬럼에 null 값이 없는지를 나타냅니다. 여기서 non-null count가 컬럼의 총 행 수와 일치하면, 그 컬럼에는 null 값이 없다는 것을 의미합니다.
  • dtype: 각 컬럼의 데이터 타입을 나타냅니다. ◦object: 문자열 데이터 ◦int64: 정수 데이터 ◦float64: 실수 데이터

컬럼 확인 및 접근 방법(컬럼은 열의 첫번쨰 값)

  • df.columns: 데이터프레임의 모든 컬럼 이름을 확인할 수 있습니다.
df.columns #데이터 프레임의 모든 컬럼 가져오기

result)
Index(['상품군별(1)', '상품군별(2)', '운영형태별(1)', '2017.01', '2017.02', 
				'2017.03',
       '2017.04', '2017.05', '2017.06', '2017.07', '2017.08', '2017.09',
       '2017.10', '2017.11', '2017.12', '2018.01', '2018.02', '2018.03',
       '2018.04', '2018.05', '2018.06', '2018.07', '2018.08', '2018.09',
       '2018.10', '2018.11', '2018.12', '2019.01', '2019.02', '2019.03',
       '2019.04', '2019.05', '2019.06', '2019.07', '2019.08', '2019.09',
       '2019.10', '2019.11', '2019.12', '2020.01', '2020.02', '2020.03',
       '2020.04', '2020.05', '2020.06', '2020.07', '2020.08', '2020.09',
       '2020.10', '2020.11', '2020.12', '2021.01', '2021.02', '2021.03',
       '2021.04', '2021.05', '2021.06', '2021.07', '2021.08', '2021.09',
       '2021.10', '2021.11', '2021.12', '2022.01', '2022.02', '2022.03',
       '2022.04', '2022.05', '2022.06', '2022.07', '2022.08', '2022.09',
       '2022.10', '2022.11', '2022.12', '2023.01', '2023.02', '2023.03',
       '2023.04', '2023.05', '2023.06', '2023.07', '2023.08', '2023.09',
       '2023.10', '2023.11', '2023.12', '2024.01', '2024.02', '2024.03',
       '2024.04', '2024.05', '2024.06', '2024.07 p)', '2024.08 p)'],
      dtype='object')
  • df.columns[인덱스]-해당 컬럼값 가져오기
df.columns[인덱스]->해당 컬럼 값 가져오기
df.columns[0]

result)
'상품군별(1)'
  • df[’컬럼 값’]-해당 컬럼 밑에 있는 행값 반환
df['상품군별(1)']

result)
0             합계
1             합계
2             합계
3     컴퓨터 및 주변기기
4     컴퓨터 및 주변기기
         ...    
73         기타서비스
74         기타서비스
75            기타
76            기타
77            기타
Name: 상품군별(1), Length: 78, dtype: object
  • df[df.columns[인덱스]]→해당 인덱스에있는 컬럼 값을 가져오고 해당 컬럼의 열 값을 반환

중복되지 않은 값 확인: df.unique()

  • 특정 컬럼에서 중복되지 않은 값들만 확인하려면 unique() 메서드를 사용할 수 있습니다. 이 메서드는 그 컬럼에서 중복된 값들을 제외하고 유일한 값만 반환합니다.
df[df.columns[0]].unique()#첫번째 컬럼 열의 중복 값을 제외하고 리스트로 반환

result)
array(['합계', '컴퓨터 및 주변기기', '가전·전자·통신기기', '서적', '사무·문구', 
'의복', '신발', '가방','패션용품 및 액세서리', '스포츠·레저용품',
 '화장품', '아동·유아용품', '음·식료품', '농축수산물',
       '생활용품', '자동차 및 자동차용품', '가구', '애완용품', 
       '여행 및 교통서비스', '문화 및 레저서비스',
       '이쿠폰서비스', '음식서비스', '기타서비스', '기타'], dtype=object)

조건에 맞는 값 추출

  • 특정 컬럼에서 조건에 맞는 행값만 반환
df[df[df.columns[0]]==]
또는
df[df['컬럼명']==]

만약 df['컬럼명']==값 이렇게 할경우 True/False 반환
  • 예시
df[df[df.columns[0]]=="음식서비스"]

특정 행까지 출력

  • df.head(값)

apply() 함수로 데이터 변환

  • Pandas의 apply() 함수를 사용하면, 데이터프레임의 각 요소에 대해 함수를 적용할 수 있습니다.
df['컬럼명']=df['컬럼명'].apply(함수명)
  • 예시(해당 문자열 타입을 정수형 타입으로 변환)
def str_replace(num):
    if type(num)==str:
        num=num.replace('-','0')
        num=int(num)
    return num
    
result['거래액']=result['거래액'].apply(str_replace)
result.info()

result)#거래액이 int로 바뀐것을 알수있다.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7176 entries, 0 to 7175
Data columns (total 5 columns):
 #   Column    Non-Null Count  Dtype 
---  ------    --------------  ----- 
 0   상품군별(1)   7176 non-null   object
 1   상품군별(2)   7176 non-null   object
 2   운영형태별(1)  7176 non-null   object
 3    날짜       7176 non-null   object
 4   거래액       7176 non-null   int64 
dtypes: int64(1), object(4)
memory usage: 280.4+ KB

drop()으로 컬럼 삭제

  • 데이터 프레임의 컬럼을 삭제할수있다.(원본 데이터는 변경되지 않는다)
df=df.drop('컬럼명",aixs='columns')

저장하기

  • df.to_csv(’파일명’,encoding=’cp949’,index=False)(index는 인덱스없이 데이터를 저장하는지)
  • 파일명이 존재할경우 덮어씌워지고 파일명이 존재 하지 않을경우 새로 만들어진다.

profile
컴공

0개의 댓글