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

pandas循环处理时无法向CSV文件追加新行报numpy.float64不可调用错误

错误根源

你触发报错的核心原因是变量命名和Python内置函数冲突:
你用了Python内置的文件打开函数名open作为变量,存储计算得到的开盘价数值,此时open会被覆盖为numpy.float64类型的浮点数。后续执行with open(...)打开文件的逻辑,相当于尝试把一个浮点数作为函数调用,直接触发TypeError: 'numpy.float64' object is not callable报错。

解决方法

把存储开盘价的变量名修改为非内置函数的名称即可,比如改为open_price,同步调整字典中的赋值即可。

修正后的完整代码

import pandas as pd
import csv

def getOHLC_df(df):
    grouped = df.groupby('symbol')
    df_final = pd.DataFrame()
    # 全局变量csv_data如果没用到可以删掉
    global csv_data
    for name, group in grouped:
        group = group.sort_values('timestamp')
        timestamp = group['timestamp'].iloc[0]
        symbol = name
        # 修改变量名,避免和内置open函数冲突
        open_price = group['ltp'].iloc[0]
        close = group['ltp'].iloc[-1]
        high = group['ltp'].max()
        low = group['ltp'].min()
        data = {
            'timestamp': timestamp,
            'symbol': symbol,
            'open': open_price,
            'close': close,
            'high': high,
            'low': low,
        }

        # pandas的append方法已废弃,新版本可替换为pd.concat
        df_final = pd.concat([df_final, pd.DataFrame([data])], ignore_index=True)
        df_final = df_final.reindex(['timestamp', 'symbol', 'open', 'high', 'low', 'close'], axis=1)

        field_names = ['timestamp', 'symbol', 'open', 'close', 'high', 'low']

        with open(f'C:/Users/choud/Documents/{symbol}.csv','a') as f_object:
            dictwriter_object = csv.DictWriter(f_object, fieldnames=field_names)
            dictwriter_object.writerow(data)
            # with上下文会自动关闭文件,不需要手动调用close

    print(df_final)

其他注意事项

  • 如果你提前创建的CSV文件还没有写入表头,第一次运行时可以在写入行之前加一行dictwriter_object.writeheader()写入表头,避免后续读取文件出现列名缺失的问题。
  • 代码中的全局变量csv_data如果没有实际用到可以删除,避免不必要的全局变量污染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:57:01