【问题标题】:if condition + check isnull() is true如果条件 + 检查 isnull() 为真
【发布时间】:2018-05-18 09:19:46
【问题描述】:

我有一个看起来像这样的 df:

     carry_dt    sedol    prime_broker_id  legal_entity   strategy  NewCarryRate  
716   2018-01-02  B1T84Z4    CITI             USSA-AGG      USSA       NaN

我想检查'NewCarryRate'列中是否有任何NaN值并替换它们

我创建了一个 if 条件:

 if (allHoldings['NewCarryRate'].iloc[[i]].isnull())==True:
        allHoldings['NewCarryRate'].values[i]= 100

我收到一条错误消息:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我知道我可以使用np.where,但我发现在这里使用 if 条件更容易,因为如果我愿意,我可以在 if 条件下添加更多行。

非常感谢您的帮助

【问题讨论】:

  • 您在.iloc[[i]] 使用双数组,您不是说.iloc[i] 吗?而且你不必使用== True 这是多余的
  • @Ron 谢谢你的回答我做了.iloc[[i]] 来选择第i 行。不正确吗?同样当我做allHoldings['NewCarryRate'].iloc[i].isnull()) 时,我得到一个错误
  • 我不确定什么是正确的,我从未使用过熊猫。但是你想用它来完成什么?是否要检查整行是否为空?
  • 看看这个answer
  • @SBad 实际上,根据您的描述,您只是希望将这些值替换为 100;明确检查第 i 行是否为 NaN 本身不是您的目的。

标签: python-3.x pandas if-statement


【解决方案1】:

您可以为此使用pd.Series.fillna

allHoldings['NewCarryRate'].fillna(100, inplace=True)

整个 if 子句是不必要的 - fillna 这样做。您收到此错误的原因是

if (allHoldings['NewCarryRate'].iloc[[i]].isnull())==True:

对于某些条目可能为真,对某些条目可能为假;解释器不知道是否执行该子句。

【讨论】:

    猜你喜欢
    • 2011-11-16
    • 2013-04-19
    • 2013-01-06
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多