首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError:系列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。df[condition]

ValueError:系列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。df[condition]
EN

Stack Overflow用户
提问于 2022-01-22 02:11:02
回答 1查看 28.2K关注 0票数 3

如果列“embark_town”中的数据是“南安普敦”,我想将它们全部改为“曼彻斯特”。因此,在使用条件设置访问数据之后,我应用了'apply‘函数。有什么问题吗?

代码语言:javascript
复制
# Import Packages
import pandas as pd 
import numpy as np
import seaborn as sns

# dataset upload
df = sns.load_dataset("titanic")
df = df.rename(columns={'pclass':'passenger_class','sex':'gender','age':'old'})

def change(name):
  if name == 'Southampton':
    name = 'Manchester'
  return name

condition = (df.embark_town == 'Southampton')

df[condition] = df[condition].apply(change)
df

得到一个错误:

代码语言:javascript
复制
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-2cf6d75dce9e> in <module>()
     14 
     15 condition = (df.embark_town == 'Southampton')
---> 16 df[condition] = df[condition].apply(change)
     17 df
     18 # df['embark_town'] = df['embark_town'].apply(change)

5 frames
/usr/local/lib/python3.7/dist-packages/pandas/core/generic.py in __nonzero__(self)
   1328     def __nonzero__(self):
   1329         raise ValueError(
-> 1330             f"The truth value of a {type(self).__name__} is ambiguous. "
   1331             "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
   1332         )

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-22 03:34:45

正如在评论中所指出的。DataFrame.apply使用Series作为输入。定义的change(name)函数需要一个字符串。消息ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().来自试图将Series与字符串进行比较。

Register指出的一个修复方法是使用条件。

代码语言:javascript
复制
condition = (df[‘embark_town’] == 'Southampton')
df[condition]['embark_town'] = 'Manchester'

要继续使用apply,更改函数需要如下所示:

代码语言:javascript
复制
def change(series):
  if series.name == 'embark_town':
      series[series.values == 'Southampton'] = 'Manchester'

  return series
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70809477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档