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
相关产品推荐
相关产品推荐

