如何基于第一列的日期将csv文件拆分为各自的csv文件(使用Python)?

4
我有一个包含多年电力负载数据的大型CSV文件,我想按月份和年份将其拆分成多个文件 - 即为2013年,2014年,2015年等的1月,2月,3月等各自返回单独的CSV文件。
我已经查阅了论坛中许多解决方案,但都没有成功。我的当前文件结构如下;
01-Jan-11,1,34606,34677,35648,35685,31058,484,1730
01-Jan-11,2,35092,35142,36089,36142,31460,520,1730
01-Jan-11,3,34725,34761,36256,36234,31109,520,1730
01-Jan-11,4,33649,33698,35628,35675,30174,512,1730
日期列中的列标题名称为“结算日期”。我熟悉使用pandas和df,但似乎无法理解如何处理这个问题!
谢谢!

2
你目前尝试了哪些代码? - cmaher
1个回答

5

以下是如何实现的方法。

首先,您需要从csv_file读取数据并以以下方式保存cols

df = pd.read_csv('path/input.csv')
cols = df.columns

然后您需要在dataframe中添加两列:MonthYear

df['Year'] = df['SETTLEMENT DATE'].apply(lambda x: x.split('-')[-1])
df['Month'] = df['SETTLEMENT DATE'].apply(lambda x: x.split('-')[1])

你只需要将你的数据框按月份或年份分别写入独立的CSV文件中,每个文件的名称应包含对应月份年份,格式如下:
for i in set(df.Year): # for classified by years files
    filename = "path/"+i+".csv"
    df.loc[df.Year == i].to_csv(filename,index=False,columns=cols)

for i in set(df.Month): # for classified by months files
    filename = "path/"+i+".csv"
    df.loc[df.Month == i].to_csv(filename,index=False,columns=cols)

希望这对您有所帮助。

谢谢!我在使用x.split命令时遇到了问题——“AttributeError:'float'对象没有'split'属性”,这可能是导入类型的结果。是否有替代函数可用?它可以是str.split吗? - tm553
感谢您的反馈@tm553。在这个回答中,我假设您的“结算日期”是字符串格式,但在其他情况下,您可以使用str(x).split。如果您正在处理整个列,则通常使用x.str.split,但是在这种情况下,x实际上是df ['SETTLEMENT DATE']列的元素,因此您需要一些适用于元素类型(如浮点数或其他类型)的函数。 - Rayhane Mama
谢谢您!如果我有一年的数据,并想将这些年度数据分成四个季度(1月1日至3月31日,4月1日至6月30日等),并保存为新的csv文件 - 我该如何做? - Lakeside52

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接