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

为何无法筛选移除最后一行含NaN值的DataFrame?

问题

需求是将所有收盘价高于SMA200的加密货币加入列表,尝试筛选并处理最后一行含NaN值的DataFrame,但if df.iloc[-1:].any(None):语句未达到预期效果。

原代码:

bullish_coins =[]
with open('Binance_USDT.csv') as f:
    for line in f:
        if "," not in line:
            continue
        symbol = line.split(",")[0]
        strip = line.split(",")[1]
        bars =binance.fetch_ohlcv(symbol, timeframe =timeframe, limit=limit)
        df =pd.DataFrame(bars, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
        df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
        df["SMA200"] = df['close'].rolling(window=200).mean()
        if df.iloc[-1:].any(None):
            print(df)
            df.dropna(inplace=True)
        elif int(df['close'][-1:]) >= int(df['SMA200'][-1:]):
            bullish_coins.append(symbol)
        else:
            continue
解决方案

1. 修正NaN判断逻辑

df.iloc[-1:].any(None)是错误用法,pandas中判断是否存在空值需要结合isna()(或isnull())与any():

  • df.iloc[-1]取DataFrame的最后一行(返回Series)
  • isna()将每个元素转换为布尔值(空值对应True)
  • any()判断该行是否存在至少一个空值

修正后的判断语句:

if df.iloc[-1].isna().any():

2. 调整数值比较逻辑

  • 原代码用int()强制转换收盘价和SMA200会丢失小数精度,直接保留原数值比较即可
  • df['close'][-1:]返回的是Series对象,用iloc[-1]取标量值更直观,还能避免索引问题

3. 优化后的完整代码

bullish_coins = []
with open('Binance_USDT.csv') as f:
    for line in f:
        if "," not in line:
            continue
        symbol = line.split(",")[0]
        # strip变量未使用,可考虑删除
        bars = binance.fetch_ohlcv(symbol, timeframe=timeframe, limit=limit)
        df = pd.DataFrame(bars, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
        df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
        df["SMA200"] = df['close'].rolling(window=200).mean()
        
        # 检查最后一行是否有NaN
        if df.iloc[-1].isna().any():
            print(df)
            df.dropna(inplace=True)
        # 确保处理后还有数据,再进行比较
        if not df.empty and df['close'].iloc[-1] >= df['SMA200'].iloc[-1]:
            bullish_coins.append(symbol)

额外说明:增加not df.empty判断,避免dropna后DataFrame为空导致后续取iloc[-1]报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:45:43