2016-12-23 54 views
2

csvをpandasデータフレームにインポートしようとしています。私は1と0で表されるブール変数を持っています。欠損値は-9で識別されます。 dtypeをブール値として指定しようとすると、私が試した内容に応じてさまざまなエラーが発生します。Pandas read_csv、欠損値がintとして指定されたブール値を読み取る

サンプルデータ:のtest.CSV

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

私はインポートとしてDTYPEを指定しよう:私も持っている

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

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

私は次のエラーを取得しますtrue値とfalse値を指定しようとしました。

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

ソースコードは、時折何をキャッチしないについて何かを言うが、nonesまたはヌルが、私がしたい正確に何です。

答えて

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

関連する問題