pandas排序csv文件并且按时间分类 python学习 pandas应用
2021/7/26 20:37:32
本文主要是介绍pandas排序csv文件并且按时间分类 python学习 pandas应用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
具体实现功能:1.读取csv文件;2. 将文件中的数据按照CommitTime排序;3. 将排好序的数据每两个月作为训练数据,隔两个月作为测试数据,生成若干个文件,分别命名为:data_i_fit.csv,data_i_est.csv.比如第1、2月作为训练数据,5、6月作为测试数据。
目录
一、导入模块
二、 读取文件&排序
三、 获取初始、终止时间
四、函数 增加时间
五、保存
六、完整代码
七、参考资料
一、导入模块
import pandas as pd import datetime from dateutil.relativedelta import relativedelta import os.path
二、 读取文件&排序
path为csv文件的路径,如使用,请更改路径。
使用pandas模块读取文件,因为文件可能会自动生成新的列,我就在打开csv的时候加了一句index_col=0。
按照“commitdate”列的值进行排序,并将排序好的文件存储下来。
path=r"C:\Users\86189\Desktop\jdt.csv" o=open(path) info=pd.read_csv(o,index_col=0) info.sort_values(by="commitdate") info.to_csv(r"C:\Users\86189\Desktop\jdt.csv") #jdt文件已经排序
三、 获取初始、终止时间
o=open(path) info=pd.read_csv(o,index_col=0) starttime=info.iloc[0,0]+':00' endtime=info.iloc[-1,0]+':00' #获得第一次和最后一次的记录时间
重新读取刚刚写入的文件, 用iloc函数获取起始时间和终止时间,因为后续会使用到。
四、函数 增加时间
def addtime(x,y): a=list(x) if a[6]=='/': a.insert(5,'0') if a[-2]=='/': a.insert(-1,'0') d=''.join(a) d=datetime.datetime.strptime(x,'%Y/%m/%d %H:%M:%S')+relativedelta(months=y) d=str(d) d=d.replace('-','/') a=list(d) if a[5]=='0': del a[5] if a[-2]=='0': del a[-2] d=''.join(a) return d #函数将时间字符串x分别增加y月并以合适的字符串形式返回
这里是做了个时间加减几个月的函数,用了datatime模块。
因为中间datetime.datetime.strptime(x,'%Y/%m/%d %H:%M:%S') 这个东西接受的字符串形式是:2001/09/01 16:00:20 这种形式的,而我们原文件的时间是2001/9/1 16:00:20这样子的,所以前几行是在进行格式转换。
转换好时间的格式后,就对这个原时间增加y个月,把结果赋值给d。
又因为原数据集的月份和号数前面没有0 ,我就用列表把字符串的形式转换了一下,最后返回符合原数据集格式、并且增加了y个月的时间d。
五、保存
info=info.set_index('commitdate') time1=starttime path=r"C:\Users\86189\Desktop" for i in range(1,100): info.loc[time1:addtime(time1,2)].to_csv(os.path.join(path,'jdt_fit_'+str(i)+'.csv')) time1=addtime(time1,8) if time1>endtime: break time2=addtime(starttime,4) for j in range(1,100): info.loc[time2:addtime(time2,2)].to_csv(os.path.join(path,'jdt_test_'+str(j)+'.csv')) time2=addtime(time2,8) if time2>endtime: break #这里用了os.path模块 批量生成csv文件
索引列为“commitdate”,初始时间赋值给time1。
来看第一个循环。这里写的循环是rang(1,100),因为当时觉得,这个数据集循环这么多次肯定能分类完,但其实如果数据集更大一点的话,就不太够用了,但是简单预测一下循环需要多少次改一下就ok了;这里直接写了一个info……to_csv就是直接索引特定的几行进行保存,特定的几行为:time1那行~time1+四个月那行,保存完之后把time1加上8个月,便于下次循环继续进行;如果time1>终止时间,说明数据集的训练集已经保存完了,退出循环。
第二个循环是分类并保存测试集的,类似第一个循环的过程。
生成成功!
六、完整代码
import pandas as pd import datetime from dateutil.relativedelta import relativedelta import os.path def addtime(x,y): a=list(x) if a[6]=='/': a.insert(5,'0') if a[-2]=='/': a.insert(-1,'0') d=''.join(a) d=datetime.datetime.strptime(x,'%Y/%m/%d %H:%M:%S')+relativedelta(months=y) d=str(d) d=d.replace('-','/') a=list(d) if a[5]=='0': del a[5] if a[-2]=='0': del a[-2] d=''.join(a) return d #函数将时间字符串x分别增加y月并以合适的字符串形式返回 path=r"C:\Users\86189\Desktop\jdt.csv" o=open(path) info=pd.read_csv(o,index_col=0) info.sort_values(by="commitdate") info.to_csv(r"C:\Users\86189\Desktop\jdt.csv") #jdt文件已经排序 o=open(path) info=pd.read_csv(o,index_col=0) starttime=info.iloc[0,0]+':00' endtime=info.iloc[-1,0]+':00' #获得第一次和最后一次的记录时间 info=info.set_index('commitdate') time1=starttime path=r"C:\Users\86189\Desktop" for i in range(1,100): info.loc[time1:addtime(time1,2)].to_csv(os.path.join(path,'jdt_fit_'+str(i)+'.csv')) time1=addtime(time1,8) if time1>endtime: break time2=addtime(starttime,4) for j in range(1,100): info.loc[time2:addtime(time2,2)].to_csv(os.path.join(path,'jdt_test_'+str(j)+'.csv')) time2=addtime(time2,8) if time2>endtime: break #这里用了os.path模块 批量生成csv文件
七、参考资料
pandas中iloc和loc的用法:https://blog.csdn.net/w_weiying/article/details/81411257
datatime库的用法:https://www.cnblogs.com/linkenpark/p/8079337.html
pandas的用法:https://www.cnblogs.com/linkenpark/p/8079337.html
还用了os.path批量生成文件
这篇关于pandas排序csv文件并且按时间分类 python学习 pandas应用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享
- 2024-11-06Python 基础编程入门教程
- 2024-11-05Python编程基础:变量与类型