用pandas如何进行数据按时间条件的分类存储。
本帖最后由 澍梵. 于 2020-6-16 19:41 编辑部分数据:
id time jd wd
1 2018-12-27 21:58:54 118.8405410 32.1253290
1 2018-12-27 21:58:59 118.8403960 32.1253530
1 2018-12-27 21:59:04 118.8403960 32.1253530
1 2018-12-27 21:59:10 118.8405410 32.1253290
1 2018-12-27 21:59:15 118.8404690 32.1253410
1 2018-12-28 00:27:38 118.8400240 32.1232670
1 2018-12-28 00:27:44 118.8406130 32.1253150
1 2018-12-28 00:28:24 118.8400110 32.1232690
1 2018-12-28 00:28:30 118.8427860 32.1242090
1 2018-12-29 22:53:16 118.7719800 31.9719110
1 2018-12-29 22:53:21 118.7727250 31.9715830
1 2018-12-29 22:53:31 118.7691840 31.9722390
1 2018-12-29 22:53:36 118.7752730 31.9711840
1 2018-12-29 22:54:17 118.7572510 31.9684950
1 2018-12-29 22:55:19 118.7425810 31.9694710
1 2018-12-29 23:03:15 118.7272370 31.9737780
1 2018-12-29 23:03:20 118.7291790 31.9749080
1 2018-12-29 23:03:25 118.7273120 31.9763250
1 2018-12-29 23:03:25 118.7248310 31.9742000
1 2018-12-30 00:43:05 118.7437960 31.9623930
1 2018-12-30 00:43:10 118.7437910 31.9623920
1 2018-12-30 00:43:36 118.7427670 31.9619360
1 2018-12-30 00:50:15 118.7455680 31.9615550
1 2018-12-30 00:50:20 118.7455650 31.9615610
1 2018-12-30 00:50:25 118.7455620 31.9615670
1 2018-12-30 00:53:30 118.7448460 31.9622080
1 2018-12-30 00:53:35 118.7454710 31.9616480
1 2018-12-30 00:53:40 118.7454720 31.9616470
1 2019-01-03 16:13:34 118.8333220 32.3738020
1 2019-01-03 16:13:39 118.8312040 32.3718910
1 2019-01-03 16:13:44 118.8333220 32.3738020
1 2019-01-05 21:56:36 118.8027790 32.4523380
1 2019-01-05 21:56:41 118.8169330 32.4322420
1 2019-01-05 21:56:46 118.8078920 32.4460910
我想借用pandas对以上的数据按照日期来进行分类存储,但是只能实现呆板的用一个日期一个日期来存储保存。
那个大哥可以教教我如何用一段代码来自动对批量数据按日期来分类,并存储在不同的文件中。
自己的呆板代码,想实现批量数据的储存比较的费劲,得手动添加日期和存储的文件名。
import pandas
d = pandas.read_excel('userdata_1.xlsx')
d1227=d.str.contains(r'2018-12-27')]
d1228=d.str.contains(r'2018-12-27')]
d1227.to_excel('d2018-12-27.xlsx',index=False,encoding="utf-8")
d1228.to_excel('d2018-12-27.xlsx',index=False,encoding="utf-8")
想借用类似于for循环或者while循环的形式来实现,对批量数据的自动将相同日期的数据存入一个文件夹中。
自己的代码,只能用已知的日期一个一个的来提取实现
有没有什么方法可以自动地对数据集按日期自动归类存储,就是使得相同日期的数据存入一个excel中。
感谢!
本帖最后由 Stubborn 于 2020-6-16 20:08 编辑
新建一个列表,time变量None
循环数据,比对数据的time, time是None,进行赋值,例如:time="2018-12-27",不是None,比较相等添加到列表,不能说明时间已经变更,把列表的数据进行写入。
按年,月,日,时都可以进行区分的 本帖最后由 BIO-张磊 于 2020-6-16 22:26 编辑
我把你的数据弄下来了,但是我不知道怎么把数据输入成2019-01-05 21:56:46这种格式,我的是2018/12/27 21:58是这种格式,不过不影响最终结果
import pandas as pd
data = pd.read_csv("你的文件.csv")#我用的是csv文件格式,跟xls差不多,不用纠结
data["date"] = data["time"].str.split(" ",expand = True)#把time列的日期时间根据 空格符 进行分列获得日期,并形成原始数据新的date一列
##注意,我不知道2019-01-05 21:56:46你这个数据之间是不是空格作为分割符,如果是其他的分隔符,自己修改.split("这里修改分隔符",expand = True)
给你看一下到现在的结果,如下,可以看见我们生成了新的日期一列
id time jd wd date
0 12018/12/27 21:58118.84054132.1253292018/12/27
1 12018/12/27 21:58118.84039632.1253532018/12/27
2 12018/12/27 21:59118.84039632.1253532018/12/27
3 12018/12/27 21:59118.84054132.1253292018/12/27
4 12018/12/27 21:59118.84046932.1253412018/12/27
5 1 2018/12/28 0:27118.84002432.1232672018/12/28
。。。。。。。
然后是分组
data_date = data["date"].drop_duplicates()#获得不重复的时期
给你看一下data_date结果
0 2018/12/27
5 2018/12/28
9 2018/12/29
19 2018/12/30
28 2019/1/3
31 2019/1/5
Name: date, dtype: object
接着,我们进行分组
data_group = data.groupby(["date"])根据date列进行分组,这个结果你是看不到的。。无法展示
最后,我们输入文件
for each_date in data_date:##根据不重复的日期循环,获得相应日期的所有数据
data_each_date = data_group.get_group(each_date)###这里是数据,你可以看一下是什么样子的,见最下方***标注的
data_each_date.to_csv("%s.csv" % each_date,index = False)###注意,如果你的日期是2018/12/27这样的,是没法生成文件名的,因为文件名不能包含/符号,如果是2019-01-05,则可以生成文件名
***这是for循环当中的一个,可以看见只有一个日期,如果你觉得最后一列date不想要了可以在循环内把这一列给去除掉,这个比较简单,我就不写了
id time jd wd date
0 12018/12/27 21:58118.84054132.1253292018/12/27
1 12018/12/27 21:58118.84039632.1253532018/12/27
2 12018/12/27 21:59118.84039632.1253532018/12/27
3 12018/12/27 21:59118.84054132.1253292018/12/27
4 12018/12/27 21:59118.84046932.1253412018/12/27
总结,利用了dateframe的str.split、drop_duplicates、groupby、和get_group四个方法,并最终用for循环依次生成相应文件
满意请采纳,谢谢 BIO-张磊 发表于 2020-6-16 20:55
我把你的数据弄下来了,但是我不知道怎么把数据输入成2019-01-05 21:56:46这种格式,我的是2018/12/27 21:5 ...
楼上正解~~~
页:
[1]