如何解决 Python Pandas 中的“系列的真值不明确。使用 an.empty、a.bool()、a.item()、a.any() 或 a.all()”? [复制]

Posted

技术标签:

【中文标题】如何解决 Python Pandas 中的“系列的真值不明确。使用 an.empty、a.bool()、a.item()、a.any() 或 a.all()”? [复制]【英文标题】:How to fix "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()" in Python Pandas? [duplicate] 【发布时间】:2019-09-07 19:41:47 【问题描述】:

我有一个数据集,其中有两个时间戳列,一个是开始时间,另一个是结束时间。我已经计算了差异并将其存储在数据集中的另一列中。根据数据集的差异列,我想在另一列中填写一个值。我正在使用 for 循环和 if else 相同但在执行时,错误“系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或a.all()" 出现

   Time_df = pd.read_excel('filepath')

   print(Time_df.head(20))

   for index, rows in Time_df.head().iterrows():
         if(Time_df["Total Time"] < 6.00 ):
             Time_df["Code"] = 1

   print(Time_df.head(20))  

在 Total Downtime 中,只要遇到小于 6 的值,它就会将 1 放入列代码中。但是,我收到问题中所述的错误。

【问题讨论】:

【参考方案1】:

修复你的代码

   print(Time_df.head(20))

   for index, rows in Time_df.head().iterrows():
         if(rows["Total Time"] < 6.00 ):
             Time_df.loc[index,"Code"] = 1

   print(Time_df.head(20))  

【讨论】:

【参考方案2】:

这种情况经常发生在我身上。在if (Time_df["Total Time"] &lt; 6.00 ) 中,(Time_df["Total Time"] &lt; 6.00 ) 是一个系列,Python 不知道如何将该系列评估为布尔值。取决于你想要什么,但很可能你想做:

Time_df.loc[Time_df["Total Time"] < 6.00, "Code"] = 1

在“总时间”小于 6 的地方将 1 放在“代码”列中。

【讨论】:

【参考方案3】:

试试np.where():


df["Code"]= np.where(df["Total Time"]<6.00,1,df["Code"])

解释

#np.where(condition, choice if condition is met, choice if condition is not met)
#returns an array explained above

【讨论】:

【参考方案4】:
def myfn(row):
    if row['Total Time'] < 6:
        return 1


time_df['code'] = time_df.apply(lambda row: myfn(row), axis=1)

【讨论】:

这很危险,因为它会将None 放在'Total Time' &gt;= 6 的位置。

以上是关于如何解决 Python Pandas 中的“系列的真值不明确。使用 an.empty、a.bool()、a.item()、a.any() 或 a.all()”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何访问 Pandas 系列中的最后一个元素?

如何将 Pandas 系列中的多个字典键转换为 DataFrame 中的列?

如何将 Pandas 系列中的连续 NaN 值分组到一组切片中?

Python:如何从熊猫系列的字典中获取值

根据另一列从 Pandas 系列中的列表中选择元素

python大数据处理模块pandas