如何将pandas读取的实验CSV按日期拆分多个DataFrame实现数据可视化
代码问题原因
你原有代码的核心问题是每次循环都会覆盖nom变量,上一轮循环生成的日期DataFrame会被直接清空替换,所以最终只会保留最后一次循环的结果。同时你用range(final_date)的写法假设日期是从0开始的连续整数,若实际日期存在缺失、不是从0起始或是字符串格式,会出现匹配不到数据的问题。
解决方案
你可以用字典存储不同日期对应的DataFrame,也可以直接用pandas内置的groupby功能满足拆分、可视化需求,不需要手动循环拆分:
方案1:拆分存入字典(适合需要单独处理各日期数据的场景)
import pandas as pd # 读取CSV x = pd.read_csv('prova.csv', sep=';') # 创建空字典存储各日期DataFrame date_df_dict = {} # 遍历所有唯一的日期值 for date_val in x['Date'].unique(): date_df_dict[f'date_{date_val}'] = x[x['Date'] == date_val].copy() # 调用示例:获取日期为1的所有数据 df_date_1 = date_df_dict['date_1']
方案2:直接用groupby绘图(更适配你的可视化需求,无需提前拆分)
你要实现不同日期不同颜色/标签的绘图,直接遍历groupby分组对象即可完成,代码更简洁:
import pandas as pd import matplotlib.pyplot as plt x = pd.read_csv('prova.csv', sep=';') fig, ax = plt.subplots(figsize=(10,6)) # 遍历分组,自动为不同日期分配不同颜色和标签 for date, group_df in x.groupby('Date'): ax.scatter(group_df['P1'], group_df['P2'], label=f'日期{date}') # 添加图例、坐标轴标签 ax.legend(fontsize=10) ax.set_xlabel('P1') ax.set_ylabel('P2') plt.show()
如果需要绘制折线图、柱状图等其他类型的图表,只需要替换scatter为对应的绘图方法即可。
内容的提问来源于stack exchange,提问作者Llorenç Macià Cid
相关产品推荐
相关产品推荐

