2016-12-23 5 views
2

csv를 pandas 데이터 프레임으로 가져 오려고합니다. 나는 값이 -9로 식별되는 1과 0으로 표시된 부울 변수를가집니다. dtype을 부울로 지정하려고하면 시도하는 내용에 따라 다양한 오류가 발생합니다.Pandas read_csv, 누락 된 값이 int로 지정된 부울 읽기

샘플 데이터 : test.csv 내가 오기로 DTYPE를 지정하려고

var1, var2 
0, 0 
0, 1 
1, 3 
-9, 0 
0, 2 
1, 7 

:

dtype_dict = {'var1':'bool','var2':'int'} 
nan_dict = {'var1':[-9]} 
foo = pd.read_csv('test.csv',dtype=dtype_dict, na_values=nan_dict) 

내가받을 다음과 같은 오류 :

ValueError: cannot safely convert passed user dtype of |b1 for int64 dtyped data in column 0

나는 또한이 true 및 false 값을 지정하려고 시도했습니다.

(210)
foo = pd.read_csv('test.csv',dtype=dtype_dict,na_values=nan_dict, 
       true_values=[1],false_values=[0]) 

하지만 그때 다른 오류 얻을 : 가끔 아무도 잡기 없습니다에 대한

Exception: Must be all encoded bytes

오류에 대한 소스 코드를 말한다 뭔가를하지만, 제구 시과 또는 널 내가 원하는 정확히입니다.

답변

0

당신은 var1 열의 converters 매개 변수를 지정할 수 있습니다

from io import StringIO 
import numpy as np 
import pandas as pd 

pd.read_csv(StringIO("""var1, var2 
0, 0 
0, 1 
1, 3 
-9, 0 
0, 2 
1, 7"""), converters = {'var1': lambda x: bool(int(x)) if x != '-9' else np.nan}) 

enter image description here

0

다음과 같이 할 수 있습니까?

df=pd.read_csv("test.csv",names=["var1","var2"]) 
df.ix[df.var1==0,'var1Bool']=False 
df.ix[df.var1==1,'var1Bool']=True 

새 항목을 만들어야하며, 만족 스러우면 이전 항목을 복사 할 수 있습니다.

var1 var2 var1Bool 
0  0  0 False 
1  0  1 False 
2  1  3  True 
3 -9  0  NaN 
4  0  2 False 
5  1  7  True 
+0

감사합니다. 데이터가 다소 크기 때문에 가져 오기 작업을하는 것이 이상적이지만, 이는 좋은 해결 방법입니다. – Reen

+0

나는 수입에 대해 왜 잘못 되었는가와 왜 효과가 없는지 이해하고 싶다. 그러나 앞으로 몇 시간 내에 더 이상 통찰력을 얻지 못하면 이것을 답으로 표시 할 것입니다. – Reen

관련 문제