我尝试在包含空值或整数的列z中获取值:
df = pd.DataFrame({'X': [1, 2, 3, 4],
'Y': [2, 10, 13, 18],
'Z': [3, None, 5, None]})
a = df[(df.X == 1) & (df.Y == 2)].Z.item()
print(a)
#output: 3
b = df[(df.X == 7) & (df.Y == 18)].Z.item()
print(b)
#output: error
它抛出一个值错误:只能将大小为1的数组转换为Python标量。因为过滤X和Y列得到的数据框是空的。如果数据框是空的,我想将变量b赋给None
。
我尝试了以下方法,效果很好:
#checking the length of the dataframe
b = df[(df.X == 1) & (df.Y == 2)].Z.item() if (len(df[(df.X == 7) & (df.Y == 18)]) == 1) else None
print(b)
# output: None
有没有更好的办法?
2条答案
按热度按时间arknldoa1#
另一种方法是使用
next(..., None)
,如果迭代器为空,则返回None:w8f9ii692#
两件事-你的结果是空的,因此error -
.item()
显然在空的pd.Series
上抛出了一个错误。第二,实现你所追求的目标的更规范的方法是:还可防止产生错误
.item()
。