【发布时间】:2019-11-30 06:58:52
【问题描述】:
我创建了一个 Pandas DataFrame:
df = pd.DataFrame( {'some_number' : [1,2,3,4,5,6]})
那我想添加一个名为 is_even 的列:
df.assign(
is_even = lambda x : 'YES' if x.some_number % 2 == 0 else 'NO'
)
我收到一个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我了解错误告诉我 if 语句后的 x.some_number 是一个系列。这让我很困惑,因为如果我这样做:
df.assign(
is_even = lambda x : 'YES' if 1==2 else x.some_number
)
它可以工作并生成以下输出:
这表明 x.some_number 实际上不是一个系列,而是一个标量值。
我知道还有其他方法可以完成我想要完成的任务。但我对这种行为很感兴趣。
为什么,当 x.some_number 在 if 子句之后时,它被视为一个系列,而当它在 else 子句中使用时,它被视为一个值?
INSTALLED VERSIONS
------------------
python : 3.8.0.final.0
python-bits : 32
OS : Windows
OS-release : 10
machine : AMD64
processor : Intel64 Family 6 Model 158 Stepping 10, GenuineIntel
byteorder : little
LOCALE : English_United States.1252
pandas : 0.25.3
numpy : 1.17.4
IPython : 7.10.0
matplotlib : 3.1.2
【问题讨论】:
标签: python python-3.x pandas lambda