2017-09-30 8 views
0

ここには、CSVデータのスナップショット、 fileがあります。NaNに基づいて列の値を0または1に置き換えます。

私は、ヌル、または「ナン」を置換するには、0と値と列「死の年」での1と他のすべてのエントリを置き換える:

import pandas as pd 
import numpy as np 
mydata_csv = pd.read_csv('D:\Python\character-deaths.csv',sep = ',',encoding = 'utf-8') 
mydata_csv 
del mydata_csv['Book of Death'] 
del mydata_csv['Death Chapter'] 

if mydata_csv['Death Year'] == np.nan: 
mydata_csv['Death Year'] = 0 
else: 
mydata_csv['Death Year'] = 1 

上記のコードは次のエラーを生成します:
ValueError:Seriesの真理値はあいまいです。 a.empty、a.bool()、a.item()、a.any()またはa.all()を使用します。

+0

非常に一般的。これをカバーするその他の回答はここでは適用されません。 https:// stackoverflow。com/q/36921951/1531971 – jdv

答えて

2

次の2つの問題を抱えて:

  1. シリーズ/データフレーム上の論理演算がスカラー結果が得られていませんが。 ifが理解できないベクトルが得られます。

  2. ;列がNaNであっても、ifの条件は成立しません。ただ、np.whereを使用

    In [9]: np.nan == np.nan 
    Out[9]: False 
    

。私は列を削除するときdf.dropを使用しているお勧めします

mydata_csv['Death Year'] = np.where(mydata_csv['Death Year'].isnull(), 0, 1) 

別の改善。代わりにdelの、よりpandaicバージョン試してください:あなたはどの行を指定しなかった

mydata_csv = mydata_csv.drop(['Book of Death', 'Death Chapter'], 1) 
0

を、私はとても列がデータを持っている場合かどうかをチェックしてみてください場合は、あなたの問題は

if mydata_csv['Death Year'] == np.nan: 

であることを疑いますまず、

+0

これは役に立ちません。間違っています。 –

0

を助け

if mydata_csv['Death Year'] is not None and mydata_csv['Death Year'] == np.nan: 

希望の線に沿って何か私はベティを考えますrはブールマスクにnotnullを使用され、その後intにキャスト - >True1あるとFalse0です:

missing dataでの作業のためにisnullまたはnotnullなどの必要な使用の特別な機能で、より多くの情報のためdocsを確認してください。

#omit `sep=','` because default parameter 
mydata_csv = pd.read_csv('D:\Python\character-deaths.csv', encoding = 'utf-8') 
#simplify double del 
mydata_csv = mydata_csv.drop(['Book of Death', 'Death Chapter'], axis=1) 
mydata_csv['Death Year'] = mydata_csv['Death Year'].notnull().astype(int) 

サンプル:

mydata_csv = pd.DataFrame({'Book of Death':[4,5,4,5,5,4], 
          'Death Chapter':[7,8,9,4,2,3], 
          'Death Year':[np.nan,3,5,np.nan,1,0], 
          'col':[7,8,9,4,2,3]}) 

print (mydata_csv) 
    Book of Death Death Chapter Death Year col 
0    4    7   NaN 7 
1    5    8   3.0 8 
2    4    9   5.0 9 
3    5    4   NaN 4 
4    5    2   1.0 2 
5    4    3   0.0 3 

mydata_csv = mydata_csv.drop(['Book of Death', 'Death Chapter'], axis=1) 
mydata_csv['Death Year'] = mydata_csv['Death Year'].notnull().astype(int) 
print (mydata_csv) 
    Death Year col 
0   0 7 
1   1 8 
2   1 9 
3   0 4 
4   1 2 
5   1 3 
関連する問題