澍梵. 发表于 2020-6-16 17:55:21

用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:06:28

本帖最后由 Stubborn 于 2020-6-16 20:08 编辑

新建一个列表,time变量None

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

按年,月,日,时都可以进行区分的

BIO-张磊 发表于 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)#把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循环依次生成相应文件

满意请采纳,谢谢

Twilight6 发表于 2020-6-16 22:29:22

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

楼上正解~~~
页: [1]
查看完整版本: 用pandas如何进行数据按时间条件的分类存储。