You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Pandas中Series真值判断歧义的ValueError问题

解决Pandas中ValueError: The truth value of a Series is ambiguous的问题

问题原因

你的代码里converted函数的判断逻辑存在错误:

if(df['Sales in kg']) == 20:
    df['Sales in kg']/2

df['Sales in kg']是一个Pandas Series对象,和20比较后会返回一个布尔值Series(每个元素对应是否等于20)。Pandas无法直接把整个布尔Series作为if的判断条件——它不知道你要判断“所有元素都满足”还是“至少一个满足”,因此抛出这个歧义错误。

另外还有两个小问题:

  • 你只写了df['Sales in kg']/2,但没有把计算结果赋值回原列,等于白做运算
  • 函数最后返回的是全局的data_frame1,而不是传入的df,不符合函数的设计逻辑

修复方案

方法1:用loc定位修改(推荐)

直接定位到“Sales in kg”列等于20的行,修改对应值:

def converted(df):
    # 复制原DataFrame避免修改原数据(可选,根据需求决定)
    df_copy = df.copy()
    df_copy.loc[df_copy['Sales in kg'] == 20, 'Sales in kg'] /= 2
    return df_copy

方法2:用apply逐行处理

对“Sales in kg”列的每个元素做判断处理:

def converted(df):
    df_copy = df.copy()
    df_copy['Sales in kg'] = df_copy['Sales in kg'].apply(lambda x: x/2 if x ==20 else x)
    return df_copy

方法3:用numpy.where批量处理

import numpy as np

def converted(df):
    df_copy = df.copy()
    df_copy['Sales in kg'] = np.where(df_copy['Sales in kg'] ==20, df_copy['Sales in kg']/2, df_copy['Sales in kg'])
    return df_copy

完整修正代码

import pandas as pd
# 若使用方法3,需取消下面的注释
# import numpy as np

data_frame1 = pd.DataFrame({'Fruits': ['Appple', 'Banana', 'Mango', 'Dragon Fruit', 'Musk melon', 'grapes'], 'Sales in kg': [20, 30, 15, 10, 50, 40]})
data_frame2 = pd.DataFrame({'Vegetables': ['tomato', 'Onion', 'ladies finger', 'beans', 'bedroot', 'carrot'], 'Sales in kg': [200, 310, 115, 110, 55, 45]})
data_frame3 = pd.DataFrame({'Baked Items': ['Cakes', 'biscuits', 'muffins', 'Rusk', 'puffs', 'cupcakes'], 'Sales in kg': [120, 130, 159, 310, 150, 140]})

print(data_frame1)
print(data_frame2)
print(data_frame3)

data_frame4= data_frame1['Sales in kg']/100
print(data_frame4)

def converted(df):
    df_copy = df.copy()
    df_copy.loc[df_copy['Sales in kg'] == 20, 'Sales in kg'] /= 2
    return df_copy

# 创建Excel写入对象
with pd.ExcelWriter("C:\\Users\\ppathar\\OneDrive - MORNINGSTAR INC\\Desktop\\demo.xlsx") as writer:
    data_frame1.to_excel(writer, sheet_name="Fruits", index=False)
    data_frame2.to_excel(writer, sheet_name="Vegetables", index=False)
    data_frame3.to_excel(writer, sheet_name="Baked Items", index=False)
    converted(data_frame1).to_excel(writer, sheet_name="Converted items", index=False)

print("Excel printed")

内容的提问来源于stack exchange,提问作者Pratik Pathare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:18:19