鱼C论坛

 找回密码
 立即注册
查看: 1244|回复: 3

用pandas如何进行数据按时间条件的分类存储。

[复制链接]
发表于 2020-6-16 17:55:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 澍梵. 于 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[d['time'].str.contains(r'2018-12-27')]
d1228=d[d['time'].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中。

感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-16 20:06:28 | 显示全部楼层
本帖最后由 Stubborn 于 2020-6-16 20:08 编辑

新建一个列表,time变量None

循环数据,比对数据的time, time是None,进行赋值,例如:time="2018-12-27",不是None,比较相等添加到列表,不能说明时间已经变更,把列表的数据进行写入。

按年,月,日,时都可以进行区分的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-16 20:55:51 | 显示全部楼层
本帖最后由 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)[0]#把time列的日期时间根据 空格符 进行分列获得日期,并形成原始数据新的date一列
##注意,我不知道2019-01-05 21:56:46你这个数据之间是不是空格作为分割符,如果是其他的分隔符,自己修改.split("这里修改分隔符",expand = True)

给你看一下到现在的结果,如下,可以看见我们生成了新的日期一列
    id              time          jd         wd        date
0    1  2018/12/27 21:58  118.840541  32.125329  2018/12/27
1    1  2018/12/27 21:58  118.840396  32.125353  2018/12/27
2    1  2018/12/27 21:59  118.840396  32.125353  2018/12/27
3    1  2018/12/27 21:59  118.840541  32.125329  2018/12/27
4    1  2018/12/27 21:59  118.840469  32.125341  2018/12/27
5    1   2018/12/28 0:27  118.840024  32.123267  2018/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   1  2018/12/27 21:58  118.840541  32.125329  2018/12/27
1   1  2018/12/27 21:58  118.840396  32.125353  2018/12/27
2   1  2018/12/27 21:59  118.840396  32.125353  2018/12/27
3   1  2018/12/27 21:59  118.840541  32.125329  2018/12/27
4   1  2018/12/27 21:59  118.840469  32.125341  2018/12/27


总结,利用了dateframe的str.split、drop_duplicates、groupby、和get_group四个方法,并最终用for循环依次生成相应文件

满意请采纳,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-16 22:29:22 | 显示全部楼层
BIO-张磊 发表于 2020-6-16 20:55
我把你的数据弄下来了,但是我不知道怎么把数据输入成2019-01-05 21:56:46这种格式,我的是2018/12/27 21:5 ...

楼上正解~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 16:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表