2017-09-30 266 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 
相关问题