当前位置: 首页 > 面试题库 >

使用if-else创建新列时出现熊猫错误:系列的真值不明确

慎旭尧
2023-03-14
问题内容

我正在使用Pandas,并尝试使用Python if-else语句(又称为三元条件运算符)创建新列,以避免被零除。

例如,在下面,我要通过除以A / B来创建新列C。我想使用if-else语句来避免被0除。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0, 5, size=(100, 2)), columns=list('AB'))
df.head()
#    A  B
# 0  1  3
# 1  1  2
# 2  0  0
# 3  2  1
# 4  4  2

df['C'] = (df.A / df.B) if df.B > 0.0 else 0.0

但是,我从最后一行得到一个错误:

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

任何帮助,将不胜感激。


问题答案:

df.B > 0 产生系列,例如:

0      True  # 4 > 0 => True
1      True  # 2 > 0 => True
2      True  # ...
3      True
4      True
5      True
6      True
7      True
8     False  # 0 is not > 0 => False
9     False  # 0 is not > 0 => False
...

返回多个值导致歧义(一些为True,另一些为False)。

一种解决方案是使用np.where

sentinel = np.nan  # Or 0 if you must...
df = df.assign(C=np.where(df['B'] != 0, df['A'] / df['B'], sentinel))
>>> df
   A  B    C
0  2  4  0.5
1  0  2  0.0
2  1  2  0.5
3  4  4  1.0
4  1  1  1.0
5  4  4  1.0
6  2  4  0.5
7  1  2  0.5
8  4  0  NaN  # NaN is assigned in cases where the value in Column `B` is zero.
9  1  0  NaN
...


 类似资料:
  • 我有这个原始数据帧: > 可能有多行具有相同的日期时间,如示例所示。 列< code>column中可能不止有两个不同的值,这是一个简化的示例。 所有值都是整数。 我想创建这个新的数据框: 需要采取的行动: > 对于列<code>列<code>中的每个唯一值,创建一个新列,该值作为列的名称。 对于每个唯一的日期时间,创建一个新行。 根据原始列填充值,如果没有值,则使用 NaN。 创建原始数据帧的代

  • 问题内容: 我知道以前曾有人问过这个问题,但是当我尝试发表声明时却遇到错误。我查看了此链接,但对我而言并没有太大帮助。我是DataFrames的列表。 我正在尝试以下, 给出以下错误: ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。 和 我尝试以下,并得到同样的错误。 我的数据类型是。我没有使用任何其他运算符和或。在

  • 问题内容: 我有一个如下所示的df: 我正在尝试创建一个如下所示的df: 我试过了 但这不是我要寻找的。 任何指导表示赞赏 问题答案: 那不是新的专栏,而是新的DataFrame: 要获得想要的结果,请使用: 要获得“新列”,您可以使用transform: 我建议阅读docs的split- apply-combine部分 。

  • 我正在使用pandas数据框,并尝试选择和所在的行。列是int类型,而是一个对象。下面是我使用的表达式: 但我一直在犯错误: 我是初学者,甚至不知道如何表达我的问题。我看过其他关于堆栈溢出的答案,但它们对我来说没有意义。这个错误是什么意思?我应该知道哪些潜在的概念才能自己理解它?我该如何解决这个问题?

  • 基于dataframe列val_1值,查看其他列col_0-10标签前缀,然后创建另一列Mycl。 数据帧看起来像: 应用逻辑后所需的数据帧: 我是trid,但这不起作用:df['mycol']=df['col'df['val_1']。aType(str)] DDL生成DataFrame: 谢谢!

  • 问题内容: 题 我在弄清楚如何根据其他两列中的值创建新的DataFrame列时遇到麻烦。我需要使用if / elif / else逻辑。但是我发现的所有文档和示例仅显示了if / else逻辑。这是我正在尝试做的一个示例: 码 我也愿意使用where()。只是找不到正确的语法。 问题答案: 如果您有多个分支语句,则最好创建一个接受行的函数,然后将其应用于。这通常比通过行迭代要快得多。