Pandas 데이터 형식 변환 을 실현 하 는 작은 기술 집합

머리말
Pandas 는 Python 에서 중요 한 데이터 분석 도구 로 Pandas 를 이용 하여 데이터 분석 을 할 때 정확 한 데이터 유형 을 확보 하 는 것 이 매우 중요 하 다.그렇지 않 으 면 예측 할 수 없 는 오류 가 발생 할 수 있다.
Pandas 의 데이터 형식:데이터 형식 은 본질 적 으로 프로 그래 밍 언어 로 데 이 터 를 어떻게 저장 하고 조작 하 는 지 이해 하 는 내부 구조 입 니 다.예 를 들 어 한 프로그램 은 두 개의 숫자 를 더 할 수 있다 는 것 을 이해 해 야 한다.예 를 들 어 5+10 은 15 를 얻 을 수 있다.또는'cat'와'hat'같은 두 문자열 이 라면 연결(추가)해서'cathat'를 얻 을 수 있 습 니 다.상 학 당·백 전 프로그래머 진 선생님 은 Pandas 데이터 유형 에 대해 곤 혹 스 러 울 수 있 는 점 중 하 나 는 Pandas,Python,numpy 의 데이터 유형 간 에 약간 중첩 되 어 있다 는 점 이 라 고 지적 했다.
대부분의 경우 판다 유형 을 해당 하 는 NumPy 유형 으로 명확 하 게 바 꿔 야 하 는 지 걱정 할 필요 가 없다.일반적으로 Pandas 의 기본 int 64 와 float 64 를 사용 하면 됩 니 다.내 가 이 표를 열거 한 유일한 이 유 는 코드 줄 이나 자신의 분석 과정 에서 Numpy 의 유형 을 볼 수 있 기 때문이다.
데이터 형식 은 오류 나 의외 의 결 과 를 만 나 기 전에 관심 을 갖 지 않 는 일 중 하나 입 니 다.그러나 새로운 데 이 터 를 Pandas 에 불 러 와 더 분석 할 때 이것 도 당신 이 검사 해 야 할 첫 번 째 일 입 니 다.
필 자 는 Pandas 를 사용 한 지 오래 되 었 지만 작은 문제 에서 실 수 를 할 수 있 습 니 다.근원 을 추적 한 결과 데 이 터 를 조작 할 때 일부 특징 열 은 Pandas 가 처리 할 수 있 는 유형 이 아니 라 는 것 을 알 게 되 었 습 니 다.따라서 본 고 는 Python 의 기본 데이터 형식 을 Pandas 가 처리 할 수 있 는 데이터 형식 으로 어떻게 바 꾸 는 지 에 대해 논의 할 것 이다.
Pandas,Numpy,Python 이 각각 지원 하 는 데이터 형식

상기 표 에서 알 수 있 듯 이 Pandas 가 지원 하 는 데이터 유형 이 가장 풍부 하 다.특정한 상황 에서 Numpy 의 데이터 유형 은 Pandas 의 데이터 유형 과 서로 전환 할 수 있다.왜냐하면 Pandas 라 이브 러 리 는 Numpy 를 바탕 으로 개 발 된 것 이기 때문이다.
실제 데 이 터 를 도입 하여 분석 하 다.
데이터 형식 은 평소에 관심 이 없 을 수도 있 고 잘못된 결 과 를 얻 을 때 까지 이미지 가 깊 은 것 이기 때문에 여기 서 실제 데이터 분석의 예 를 도입 하여 이 해 를 깊이 있 게 한다.

import numpy as np
import pandas as pd

data = pd.read_csv('data.csv', encoding='gbk') #           
data

데이터 로드 가 완료 되 었 습 니 다.만약 에 지금 이 데이터 에서 조작 을 하려 면 데이터 열 2016,2017 대응 항목 을 추가 하 는 것 입 니 다.
data['2016']+data['2017']\#당연 하 다 고 생각 하 는 방법

결 과 를 보면 생각 했 던 것 처럼 수치 가 대응 되 지 않 았 습 니 다.이 는 Pandas 에서 object 형식 에 Python 의 문자열 과 등가 하기 때 문 입 니 다.
data.info()\#데 이 터 를 처리 하기 전에 데 이 터 를 불 러 오 는 정 보 를 먼저 봐 야 합 니 다.

데 이 터 를 불 러 오 는 관련 정 보 를 본 후에 다음 과 같은 몇 가지 문 제 를 발견 할 수 있 습 니 다.
4.567917.고객 번호 의 데이터 형식 은 int 64 이지 object 형식 이 아 닙 니 다.4.567918.
  • 2016,2017 열의 데이터 형식 은 object 이지 수치 형식(int 64,float 64)이 아니다
  • 성 장 률,소속 그룹의 데이터 유형 은 object 유형 이 아니 라 수치 유형 이 어야 합 니 다
  • year,month,day 의 데이터 형식 은 datetime 64 형식 이지 object 형식 이 아 닙 니 다
  • Pandas 에서 데이터 형식 변환 을 하 는 데 는 세 가지 기본 적 인 방법 이 있 습 니 다.
  • astype()함 수 를 사용 하여 강제 유형 전환
  • 사용자 정의 함수 데이터 형식 변환
  • Pandas 가 제공 하 는 함 수 를 사용 합 니 다.예 를 들 어 tonumeric()、to_datetime()
  • astype()함수 로 형식 변환
    데이터 열 을 데이터 형식 으로 변환 하 는 가장 쉬 운 방법 은 astype()함 수 를 사용 하 는 것 이다.
    
    data['    '].astype('object')
    
    data['    '] = data['    '].astype('object') #                 

    위의 결 과 는 매우 좋아 보 입 니 다.다음은 몇 개의 astype()함수 가 열 데이터 에 작용 하지만 효력 을 잃 는 예 를 드 리 겠 습 니 다.
    
    data['2017'].astype('float')
    
    data['   '].astype('int')

    위의 두 가지 예 에서 알 수 있 듯 이 변환 대기 열 에 변환 할 수 없 는 특수 값 이 포함 되 어 있 을 때(예 에서 65509℃,ErrorValue 등)astype()함수 가 효력 을 잃 습 니 다.어떤 때 는 astype()함수 가 성공 했다 고 해서 실행 결과 가 기대 에 부합 되 는 것 은 아 닙 니 다(신 갱!)
    
    data['  '].astype('bool')

    언뜻 보기 에는 결과 가 좋아 보이 지만 자세히 살 펴 보면 큰 문제 가 발견 된다.그것 은 모든 값 이 True 로 바 뀌 었 다 는 것 입 니 다.그러나 이 열 에는 N 표지 가 여러 개 포함 되 어 있 기 때문에 astype()함수 도 이 열 에서 실 효 됩 니 다.
    astype()함수 의 유효한 상황 을 정리 합 니 다.
    데이터 열 에 있 는 모든 단 위 는 숫자(2,2.12 등)로 간단하게 해석 할 수 있다
  • 데이터 열 에 있 는 모든 단 위 는 수치 형식 이 고 문자열 object 형식 으로 전환 합 니 다
  • 데이터 에 부족 한 값,특수 문자 astype()함수 가 있 으 면 효력 을 잃 을 수 있 습 니 다.
    사용자 정의 함수 로 데이터 형식 변환
    이 방법 은 특히 변환 을 기다 리 는 데이터 열의 데이터 가 비교적 복잡 한 상황 에 적용 되 며,하나의 함 수 를 구축 하여 데이터 열의 모든 데이터 에 응용 하고,이 를 적합 한 데이터 형식 으로 변환 할 수 있다.
    상기 데이터 의 화폐 에 대해 float 형식 으로 변환 해 야 하기 때문에 변환 함 수 를 쓸 수 있 습 니 다.
    
    def convert_currency(value):
     """
             float  
     -    ¥ ,
     -    float  
     """
     new_value = value.replace(',', '').replace('¥', '')
     return np.float(new_value)
    이제 Pandas 의 apply 함 수 를 사용 할 수 있 습 니 다.covertcurrency 함 수 는 2016 열 에 있 는 모든 데이터 에 적 용 됩 니 다.
    
    data['2016'].apply(convert_currency)

    이 열의 모든 데 이 터 는 대응 하 는 수치 형식 으로 바 뀌 었 기 때문에 이 열의 데 이 터 를 흔히 볼 수 있 는 수학 조작 을 할 수 있다.lambda 표현 식 을 이용 하여 코드 를 바 꾸 면 간결 할 수 있 지만 초보 자 에 게 는 좋 지 않 습 니 다.
    
    data['2016'].apply(lambda x: x.replace('¥', '').replace(',', '')).astype('float')
    함수 가 여러 열 에 중복 적용 되 어야 할 때 개인 적 으로 첫 번 째 방법 을 추천 합 니 다.먼저 함 수 를 정의 하고 또 하나의 장점 은 read 를 조합 할 수 있다 는 것 입 니 다.csv()함수 사용(뒤에 소개).
    
    #2016、2017        
    data['2016'] = data['2016'].apply(convert_currency)
    data['2017'] = data['2017'].apply(convert_currency)
    같은 방법 으로 성 장 률 에 활용 하여 먼저 사용자 정의 함 수 를 구축한다.
    
    def convert_percent(value):
     """
              float    
     -    %
     -   100     
     """
     new_value = value.replace('%', '')
     return float(new_value) / 100
    Pandas 의 apply 함 수 를 사용 하여 covertpercent 함 수 는 성 장 률 열의 모든 데이터 에 적 용 됩 니 다.
    
    data['   '].apply(convert_percent)
    lambda 표현 식 사용 하기:
    
    data['   '].apply(lambda x: x.replace('%', '')).astype('float') / 100
    결 과 는 모두 같다.

    상태 열 을 변환 하기 위해 서 는 Numpy 의 where 함 수 를 사용 하여 Y 값 을 True 로 매 핑 할 수 있 으 며,기타 값 은 모두 False 로 매 핑 할 수 있 습 니 다.
    
    data['  '] = np.where(data['  '] == 'Y', True, False)
    마찬가지 로 사용자 정의 함 수 를 사용 하거나 lambda 표현 식 을 사용 할 수 있 습 니 다.이 방법 들 은 모두 이 문 제 를 완벽 하 게 해결 할 수 있 습 니 다.여 기 는 하나의 아 이 디 어 를 제공 할 뿐 입 니 다.
    Pandas 의 일부 보조 함 수 를 이용 하여 유형 변환 을 진행 합 니 다.
    Pandas 의 astype()함수 와 복잡 한 자정 함수 사이 에 중간 부분 이 있 는데 그것 이 바로 Pandas 의 보조 함수 입 니 다.이러한 보조 함 수 는 특정한 데이터 형식의 변환 에 매우 유용 하 다(예 를 들 어 tonumeric()、to_datetime())。소속 그룹 데이터 열 에 비수 치 를 포함 하고 있 습 니 다.astype()로 변환 하 는 중 오류 가 발생 했 지만 tonumeric()함수 처리 가 우아 합 니 다.
    
    pd.to_numeric(data['   '], errors='coerce').fillna(0)

    비 수치 가 0.0 으로 바 뀌 었 음 을 알 수 있 습 니 다.물론 이 충전 치 는 선택 할 수 있 습 니 다.구체 적 인 문 서 는 다음 과 같 습 니 다.
    pandas.to_numeric - pandas 0.22.0 documentation
    Pandas 의 todatetime()함 수 는 단독 year,month,day 세 열 을 하나의 단독 시간 스탬프 로 합 칠 수 있 습 니 다.
    
    pd.to_datetime(data[['day', 'month', 'year']])

    데이터 열 교체 완료
    
    data['new_date'] = pd.to_datetime(data[['day', 'month', 'year']]) #        
    data['   '] = pd.to_numeric(data['   '], errors='coerce').fillna(0)
    여기까지 모든 데이터 열 이 변환 되 었 습 니 다.최종 데이터 표시:


    데 이 터 를 읽 을 때 데이터 형식 을 변환 하여 한 걸음 에 도착 합 니 다.
    
    data2 = pd.read_csv("data.csv",
       converters={
        '    ': str,
        '2016': convert_currency,
        '2017': convert_currency,
        '   ': convert_percent,
        '   ': lambda x: pd.to_numeric(x, errors='coerce'),
        '  ': lambda x: np.where(x == "Y", True, False)
        },
       encoding='gbk')
    lambda 표현 식 보다 사용자 정의 함 수 를 사용 하 는 것 이 훨씬 편리 하 다 는 것 을 보 여 줍 니 다.대부분의 경우 lambda 는 간결 합 니 다.필자 자신 도 즐겨 사용 합 니 다)
    총결산
    데이터 세트 를 조작 하 는 첫 번 째 단 계 는 정확 한 데이터 형식 을 설정 한 다음 에 데이터 의 분석,시각 화 등 조작 을 할 수 있 도록 하 는 것 입 니 다.Pandas 는 매우 편리 한 함 수 를 제공 합 니 다.이런 함수 가 있 으 면 데 이 터 를 분석 하 는 것 이 편리 할 것 입 니 다.
    자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기