根据NaN值将列值替换为0或1
根据NaN值将列值替换为0或1
这个问题已经在此处有答案:
这里是CSV数据的快照,
文件。
我想将列\'Death Year\'中的null或\'nan\'值替换为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()。
admin 更改状态以发布 2023年5月21日
你有两个问题:
-
对于一个序列/数据框的逻辑操作不能产生标量结果。它会生成一个向量,
if
无法理解。 -
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
:
mydata_csv = mydata_csv.drop(['Book of Death', 'Death Chapter'], 1)