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

Pandas过滤DataFrame触发ValueError,请求修复方法

问题:Pandas DataFrame过滤触发ValueError错误

错误的过滤代码

self.symbols_dataframe_stc_stocks = self.symbols_dataframe[(self.symbols_dataframe['categoryName'] == 'STC') and (self.symbols_dataframe['categoryName'] == 'STK') and (self.symbols_dataframe['levarage'] == 100.)]
self.symbols_dataframe_cfd_stocks = self.symbols_dataframe[(self.symbols_dataframe['categoryName'] == 'STC') and (self.symbols_dataframe['categoryName'] == 'STK') and (self.symbols_dataframe['levarage'] != 100.)]

DataFrame数据类型

symbol                 object
currency               object
categoryName           object
currencyProfit         object
quoteId                 int64
quoteIdCross            int64
marginMode              int64
profitMode              int64
pipsPrecision           int64
contractSize            int64
exemode                 int64
time                    int64
expiration             object
stopsLevel              int64
precision               int64
swapType                int64
stepRuleId              int64
type                    int64
instantMaxVolume        int64
groupName              object
description            object
longOnly                 bool
trailingEnabled          bool
marginHedgedStrong       bool
swapEnable               bool
percentage            float64
bid                   float64
ask                   float64
high                  float64
low                   float64
lotMin                float64
lotMax                float64
lotStep               float64
tickSize              float64
tickValue             float64
swapLong              float64
swapShort             float64
leverage              float64
spreadRaw             float64
spreadTable           float64
starting               object
swap_rollover3days      int64
marginMaintenance       int64
marginHedged            int64
initialMargin           int64
shortSelling             bool
timeString             object
currencyPair             bool
dtype: object

报错信息

Traceback (most recent call last):
  File "C:\Users\...\AppData\Local\Programs\Python\Python39\lib\threading.py", line 973, in _bootstrap_inner
    self.run()
  File "C:\Users\...\AppData\Local\Programs\Python\Python39\lib\threading.py", line 910, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\...\PycharmProjects\LSTM_multiple_indicators\UI.py", line 353, in getAllSymbols_xtb_api
    self.symbols_dataframe_stc_stocks = self.symbols_dataframe[(self.symbols_dataframe['categoryName'] == 'STC') and (self.symbols_dataframe['categoryName'] == 'STK') and (self.symbols_dataframe['levarage'] == 100.)]
  File "C:\Users\...\PycharmProjects\LSTM_multiple_indicators\venv\lib\site-packages\pandas\core\generic.py", line 1527, in __nonzero__
    raise ValueError(
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

问题分析与修复

核心问题点

  1. 逻辑运算符错误:Pandas处理Series布尔索引时,不能用Python原生的and/or,必须用元素级的&(与)/|(或),且每个条件需用括号包裹,避免运算优先级冲突。
  2. 条件逻辑矛盾:categoryName == 'STC'和categoryName == 'STK'不可能同时成立,应该筛选categoryName为两者之一的记录,需用isin方法或|运算符。
  3. 拼写错误:代码中levarage是拼写错误,DataFrame实际列名为leverage。

修复后的代码

# 筛选categoryName为STC或STK,且leverage等于100的记录
self.symbols_dataframe_stc_stocks = self.symbols_dataframe[
    (self.symbols_dataframe['categoryName'].isin(['STC', 'STK'])) & 
    (self.symbols_dataframe['leverage'] == 100.)
]

# 筛选categoryName为STC或STK,且leverage不等于100的记录
self.symbols_dataframe_cfd_stocks = self.symbols_dataframe[
    (self.symbols_dataframe['categoryName'].isin(['STC', 'STK'])) & 
    (self.symbols_dataframe['leverage'] != 100.)
]

补充说明

  • 使用isin(['STC', 'STK'])比(categoryName == 'STC') | (categoryName == 'STK')更简洁,尤其当可选值较多时。
  • 对浮点列做相等判断时,建议考虑精度问题,比如用abs(leverage - 100.) < 1e-6替代直接==,避免因浮点精度导致匹配失败。

内容的提问来源于stack exchange,提问作者Jakub Szurlej

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:12:20