如何拼接循环生成的30个独立pandas DataFrame为单个DataFrame?
解决方法:拼接独立生成的每日DataFrame
嗨,我来帮你搞定这个DataFrame拼接的问题!不管这些data_day是怎么生成的,核心思路都是先把它们集中到一个列表里,再用Pandas的concat()方法一次性合并,具体步骤如下:
步骤1:收集所有每日DataFrame到列表
首先,你需要把这30个独立的data_day DataFrame全部放进一个列表里。如果它们的命名是有规律的(比如data_day_1、data_day_2…data_day_30),可以手动逐个添加,或者用循环批量获取:
方式A:手动添加(适合数量不多的情况)
# 创建空列表用于存储所有每日DataFrame daily_dfs = [] # 逐个添加每个data_day daily_dfs.append(data_day_1) daily_dfs.append(data_day_2) # ... 中间省略其他27个 ... daily_dfs.append(data_day_30)
方式B:批量获取(如果命名有规律)
如果你的data_day是按序号命名的,可以通过globals()或locals()来批量获取变量,避免手动重复输入:
daily_dfs = [] for i in range(1, 31): # 根据序号拼接变量名,从全局变量中获取对应的DataFrame df_name = f"data_day_{i}" daily_dfs.append(globals()[df_name])
步骤2:合并所有DataFrame
用Pandas的pd.concat()方法把列表里的所有DataFrame合并成一个最终的final_data_day:
import pandas as pd # 合并列表中的DataFrame,ignore_index=True用于重置合并后的索引,避免重复 final_data_day = pd.concat(daily_dfs, ignore_index=True)
额外优化建议
- 确保列名一致:合并前要确认所有
data_day的列名完全相同,否则合并后不同列名的部分会填充NaN,影响数据完整性。 - 按日期排序:如果你的数据包含日期列(比如
timestamp),合并后可以按日期重新排序,让数据更规整:# 假设日期列是'timestamp',按日期排序并重置索引 final_data_day = final_data_day.sort_values(by='timestamp').reset_index(drop=True) - 提前收集更高效:如果之后还有类似需求,建议在生成
data_day的过程中直接把它添加到列表里,比如在处理每日数据的环节就完成收集,避免事后手动整理:daily_dfs = [] # 假设你有一个包含所有目标日期的列表date_list for single_date in date_list: # 提取当日数据并生成新特征 data_day = df[df['timestamp'].dt.date == single_date].copy() # 这里添加你的新特征生成代码... # 直接将生成的data_day加入列表 daily_dfs.append(data_day) # 最后合并 final_data_day = pd.concat(daily_dfs, ignore_index=True)
内容的提问来源于stack exchange,提问作者Annalix
相关产品推荐
相关产品推荐

