光伏系统时序CSV数据拼接异常:DataFrame维度远小于预期
问题分析与修复方案
核心问题排查
你的代码存在两个关键错误,导致拼接后的数据量远小于预期:
- 循环逻辑错误
- 内层循环中,
name始终被赋值为第一个文件的路径,完全没有遍历目录下的其他CSV文件 if name.endswith('.csv')语句缩进错误,不在内层循环范围内,只会处理最后一次赋值的(重复的)文件路径
- 内层循环中,
- 重复读取同一文件
由于上述逻辑错误,代码一直在重复读取1 Apr 2021.csv这一个文件,而非遍历所有每日数据文件
修复后的代码
import pandas as pd import os excel_dir = '/kaggle/input/pv-output-1/PV 2122' PV_2122 = pd.DataFrame() # 初始化空DataFrame # 遍历目标目录下的所有CSV文件 for filename in os.listdir(excel_dir): if filename.endswith('.csv'): file_path = os.path.join(excel_dir, filename) df = pd.read_csv(file_path) PV_2122 = pd.concat([PV_2122, df], ignore_index=True) # 检查拼接后的数据形状(注意shape是属性,不是方法,不需要加括号) print(PV_2122.shape)
后续分组计算与绘图步骤
1. 数据预处理
先将timestamp转换为datetime格式,确保时序分析的正确性:
PV_2122['timestamp'] = pd.to_datetime(PV_2122['timestamp'])
2. 分组计算平均发电量
假设光伏系统列名为pv_system,发电量列名为power,替换为你的实际列名即可:
avg_power = PV_2122.groupby(['pv_system', 'timestamp'])['power'].mean().reset_index()
3. 绘制时序变化图表
import matplotlib.pyplot as plt # 按光伏系统拆分绘制曲线 for system in avg_power['pv_system'].unique(): system_data = avg_power[avg_power['pv_system'] == system] plt.plot(system_data['timestamp'], system_data['power'], label=f'光伏系统{system}') plt.xlabel('时间') plt.ylabel('平均发电量') plt.title('各光伏系统发电量时序变化') plt.legend() plt.xticks(rotation=45) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Joy
相关产品推荐
相关产品推荐

