2013-07-17 8 views
16
私は私がブールする Status列に変換したい df

しかし、もし(ステータスが配信されなかったとき<code>True</code>をステータスが配信され、<code>False</code>)

Order Number  Status 
1   1668 Undelivered 
2  19771 Undelivered 
8 Undelivered 
4   2229 Delivered 
5  00056 Undelivered 

として名前DATAFRAMEがいる

をブールする文字列を含むパンダシリーズを変換しますステータスは「未配信」でもなく「配信済み」でもなく、NotANumberなどと見なす必要もありません。

私はそう、私は簡単にどちらかTrueまたはFalseとみなすことができ、他の文字列を追加することができ辞書

d = { 
    'Delivered': True, 
    'Undelivered': False 
} 

を使用したいと思います。

答えて

27

In [7]: df = pd.DataFrame({'Status':['Delivered', 'Delivered', 'Undelivered', 
            'SomethingElse']}) 

In [8]: df 
Out[8]: 
      Status 
0  Delivered 
1  Delivered 
2 Undelivered 
3 SomethingElse 

In [9]: d = {'Delivered': True, 'Undelivered': False} 

In [10]: df['Status'].map(d) 
Out[10]: 
0  True 
1  True 
2 False 
3  NaN 
Name: Status, dtype: object 
+0

「AttributeError: 'DataFrame'オブジェクトに「map」属性がありません。 –

+0

'map'は、DataFrameではなくSeries上のメソッドです。 – joris

+0

うん、それは申し訳ありません。 –

4

あなたは必要なものすべてを手に入れました。あなたはreplaceを発見させていただきます:

あなただけ mapを使用することができます
df.replace(d) 
+0

ああ、私は私の答えを掲載しました。この場合、 'map'との違いはありますか? – joris

+0

他のもの(diftにはない)が 'replace'で残っているようですが、' map'で 'NaN'に変換されたようです – joris

+3

実際には' map''が良い選択です。 '' d''にない場合、値は無効で、 '' NaN''で置き換えるべきです。 –

4

replace方法の一例のみを指定した列C2の値を交換するとDataFrame型となります。

import pandas as pd 
df = pd.DataFrame({'C1':['X', 'Y', 'X', 'Y'], 'C2':['Y', 'Y', 'X', 'X']}) 

    C1 C2 
0 X Y 
1 Y Y 
2 X X 
3 Y X 

df.replace({'C2': {'X': True, 'Y': False}}) 

    C1  C2 
0 X False 
1 Y False 
2 X True 
3 Y True 
+1

このコードは質問に答えるかもしれませんが、どのようにして問題が解決されるのか、および/またはそれがなぜ解決されるのかに関する追加の文脈を提供することで、回答の長期的価値が向上します。 –

関連する問題