如何解决 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"] < 6.00 )
中,(Time_df["Total Time"] < 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' >= 6
的位置。以上是关于如何解决 Python Pandas 中的“系列的真值不明确。使用 an.empty、a.bool()、a.item()、a.any() 或 a.all()”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Pandas 系列中的多个字典键转换为 DataFrame 中的列?