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.
데이터 열 을 데이터 형식 으로 변환 하 는 가장 쉬 운 방법 은 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 등)로 간단하게 해석 할 수 있다
사용자 정의 함수 로 데이터 형식 변환
이 방법 은 특히 변환 을 기다 리 는 데이터 열의 데이터 가 비교적 복잡 한 상황 에 적용 되 며,하나의 함 수 를 구축 하여 데이터 열의 모든 데이터 에 응용 하고,이 를 적합 한 데이터 형식 으로 변환 할 수 있다.
상기 데이터 의 화폐 에 대해 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 는 매우 편리 한 함 수 를 제공 합 니 다.이런 함수 가 있 으 면 데 이 터 를 분석 하 는 것 이 편리 할 것 입 니 다.
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Pandas】DatetimeIndex란? no.29안녕하세요, 마유미입니다. Pandas에 대한 기사를 시리즈로 작성하고 있습니다. 이번은 제29회의 기사가 됩니다. 에서 Pandas의 시간에 대한 모듈에 대해 씁니다. 이번 기사에서는, 「DatetimeIndex」...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.