从DataFrame字典中提取指定列并生成列名为字典键的新DataFrame
从DataFrame字典提取指定列生成新DataFrame
核心思路就是遍历字典里的每个DataFrame,提取你需要的列,再把这些Series按列合并成新DataFrame,列名直接用字典的键(也就是标的代码)——不管标的数量多少,这个方法都能自动适配。
基础实现代码
假设你的DataFrame字典叫df_dict,要提取的列是'close',一行代码就能搞定:
import pandas as pd # 提取所有DataFrame的'close'列,合并为新DataFrame new_df = pd.concat({ticker: df['close'] for ticker, df in df_dict.items()}, axis=1)
逻辑解释
- 字典推导式
{ticker: df['close'] for ticker, df in df_dict.items()}会生成一个新字典:键是标的代码,值是对应DataFrame的'close'列(Series类型)。 pd.concat(..., axis=1)把这些Series按列拼接,自动用原字典的键作为新DataFrame的列名。
容错处理(可选)
如果担心部分DataFrame没有'close'列,可以先过滤掉这类条目:
# 只保留含'close'列的DataFrame对应的列 new_df = pd.concat( {ticker: df['close'] for ticker, df in df_dict.items() if 'close' in df.columns}, axis=1 )
示例演示
先构造一个测试用的DataFrame字典:
# 生成示例数据 df_spy = pd.DataFrame({'close': [450, 452, 448], 'open': [449, 451, 447]}) df_qqq = pd.DataFrame({'close': [380, 385, 382], 'open': [379, 384, 381]}) df_smh = pd.DataFrame({'close': [210, 215, 212], 'open': [209, 214, 211]}) df_dict = {'SPY': df_spy, 'QQQ': df_qqq, 'SMH': df_smh}
运行基础代码后,new_df的结构如下:
SPY QQQ SMH 0 450 380 210 1 452 385 215 2 448 382 212
内容的提问来源于stack exchange,提问作者Andy Visser
相关产品推荐
相关产品推荐

