2017-01-29 3 views
1

파이썬에서 큰 csv 파일을 읽었습니다. 데이터 세트 및 누락 된 값이 코딩되는 방법에 대한 설명은 없습니다.기호 NaN이 누락 된 값에 대한 문자열 또는 파이썬 예약 기호인지 확인하십시오.

누락 된 값을 모두 0으로 바꾸려면 function fillna()을 사용할 수 있다고 생각합니다. 그러나, 내 질문 :이 함수는 fillna() 생각하고 데이터 프레임에있는 NaN 기호가 파이썬 예약 기호 오른쪽 경우 누락 된 값을 인식 할 수있는 누락 된 값으로 작동하는 다른 함수가있을 수 있습니다? NaN이 문자열 인 경우 (예 : "NaN") fillna() 함수는 해당 권한을 감지하지 못합니다.

나는 여기에 실험을

import numpy as np 
a = pd.DataFrame({'a':[1,2,'NaN'], 'b':['NaN',1,np.nan]}) 
a.fillna("") 

않았다 나는 공백없는 값을 대체하려고합니다. 그러나 알 수 있듯이이 fillna() 함수는 np.nan 만 인식하지만 문자열 "NaN"을 누락 값으로 인식 할 수 없습니다. 이해할 수 있습니다.

여기 내 질문은 다음과 같습니다. read_csv 또는 원시 함수에서 누락 된 값을 처리하기 위해 python이 작동하는 다른 함수 (실제로는 인코딩 된 것)가 실제로 어떻게됩니까? 이러한 가져 오기 기능이 원시 데이터 세트의 어떤 기호를 "볼"경우 csv 또는 txt 파일 (또는 다른 형식)을 읽을 때 예약 된 기호 NaN을 사용하여 원시 데이터 조각을 자동으로 대체합니까? 예를 들어, 원시 데이터를 읽거나, 공백을 보거나 "\ N"과 같은 심볼을 보았을 때, 그들은 무엇을 할 것입니까? 나는 그들이 "\ N"을 본다면, 그냥이 기호를 문자열로 만들 것입니다, 맞습니까? 그러나 그들이 공백을 보게되면, 그들은 무엇을 할 것인가?

두 번째 질문 : 데이터 세트에서와 마찬가지로 누락 된 값을 나타 내기 위해 다중 기호를 사용할 수 있습니다. 예를 들어 파이썬 예약 기호 NaN (원시 데이터를 읽을 때 자동 생성됨)은 누락 된 값을 나타냅니다. 문자열 "\N"은 누락 된 값을 나타냅니다. blank는 또한 누락 된 값을 나타냅니다. 그래서 나는이 모든 종류의 누락 된 값 기호를 하나로 변환하는 함수, 즉 python 예약 기호 NaN을 작성해야합니다. 나는 다음과 같은

def nullify(x): 
    if x == "\\N": 
     return "NaN" 
    else: 
     return x 

그럼 내가 "NaN" 문자열의 무리보다는 fillna()가 잡을 데 실패와 같은 기능을하게 파이썬 예약 된 기호 NaN을 가지고 있음을 발견했다. 올바른 방법이 nullify() 그것은 내가 현실 세계 원시 데이터와 함께 놀러 처음 시작할 때입니다, 많은 흥미로운 일들이 나타나기 시작

import numpy as np 
def nullify(x): 
    if x == "\\N": 
     return np.nan 
    else: 
     return x 

이다 쓰고 있는지 궁금해. 모든 제안을 부탁드립니다.

답변

4

pandas.read_csv()은 키워드 인수 na_values을 사용합니다.

na_values ​​: 다음 documentation를 인용 스칼라, STR, 목록 같은, 또는 DICT, 기본 없음 추가 문자열 NA/NaN의로 인식 할 수 있습니다. dict이 성공하면 특정 열마다 NA 값이 지정됩니다. 기본적으로 다음 값은 NaN으로 해석됩니다. '', '# N/A', '# N/AN/A', '#NA', '-1. # IND', '-1. # QNAN' , '-NNN', '-nan', '1. # IND', '1. # QNAN', 'N/A', 'NA', 'NULL', 'NaN', 'nan'`.

nan의 한 종류로 모두 변환 할 CSV에서 읽을 때 na_values에 데이터 세트에서 NaN이 모든 유형을 추가, 그래서 당신은 수동으로 변환에 의존 할 필요가 없습니다.