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

Python:从大数据框每行生成新数据框并追加数据报错求助

解决方法:用字典管理动态生成的DataFrame

你遇到的语法错误是因为Python不允许使用运算符(比如+)拼接出来的字符串直接作为变量名进行赋值,df+coinsymbol=...这种写法完全不符合Python的语法规则,所以抛出了SyntaxError: can't assign to operator。

而且你的原代码还有其他逻辑问题:比如for循环的写法错误,for x in len(df_prep.index)是无效的遍历方式,应该直接遍历DataFrame的行或者索引。

更规范且易维护的做法是用字典来存储各个symbol对应的DataFrame,这样既能完美实现你的需求,又方便后续的追加操作。下面是具体的实现代码:

1. 初始化存储结构并拆分原始数据

import pandas as pd

# 初始化一个空字典,用来存放每个symbol对应的DataFrame
symbol_dfs = {}

# 遍历df_prep的每一行
for idx, row in df_prep.iterrows():
    coinsymbol = row['symbol']
    # 将当前行转换为DataFrame(row是Series格式,转成二维结构方便后续追加)
    row_df = pd.DataFrame([row])
    
    # 如果字典中还没有这个symbol的DataFrame,就创建新的;否则追加数据
    if coinsymbol not in symbol_dfs:
        symbol_dfs[coinsymbol] = row_df
    else:
        # 注意:pandas 2.0+版本中append方法已被弃用,推荐使用pd.concat
        symbol_dfs[coinsymbol] = pd.concat([symbol_dfs[coinsymbol], row_df], ignore_index=True)

2. 每日新增数据的追加方法

假设每日新增的数据存在daily_new_df中(结构和df_prep完全一致),可以用同样的逻辑完成追加:

for idx, row in daily_new_df.iterrows():
    coinsymbol = row['symbol']
    row_df = pd.DataFrame([row])
    
    if coinsymbol in symbol_dfs:
        symbol_dfs[coinsymbol] = pd.concat([symbol_dfs[coinsymbol], row_df], ignore_index=True)
    else:
        # 如果新增的symbol是之前没有的,直接添加到字典中
        symbol_dfs[coinsymbol] = row_df

为什么推荐用字典而不是动态创建变量?

  • 动态创建变量(比如用globals()[f"df_{coinsymbol}"] = row_df)虽然能实现需求,但会污染全局命名空间,后续查找和管理这些零散的变量非常麻烦。
  • 字典可以统一管理所有symbol的DataFrame,通过symbol_dfs['BTCUSDT']就能快速获取对应的DataFrame,操作逻辑更清晰,也更便于维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:45:07