2017-09-30 284 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://開頭計算器。com/q/36921951/1531971 – jdv

回答

2

你有兩個問題:

  1. 一系列邏輯運算/數據幀不會產生一個標量的結果。它會產生一個向量,即if無法理解。

  2. NaN != NaN;即使列爲NaN,您的if條件也不會成立。

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

只需使用np.where

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

的另一項改進,我建議刪除列時使用df.drop。取而代之的del,嘗試更多pandaic版本:

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

沒有指定哪行,但我懷疑你的問題是在

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

如果是這樣嘗試檢查,如果如果列有數據第一,沿

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

希望之行的東西,可以幫助

+0

這沒有幫助。這是不正確的。 –

0

我想貝蒂r是使用notnull布爾口罩,然後將其轉換爲int - >True1False0

對於missing data工作就像是isnullnotnull需要使用特殊功能,檢查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 
相關問題