精华内容
下载资源
问答
  • pandas时间排序

    千次阅读 2020-03-15 12:15:59
    时间排序pandas中,有一个非常常用的函数 date_range,尤其是在处理时间序列数据时,这个函数的作用就是产生一个 DatetimeIndex,就是时间序列数据的索引。 pandas.date_range(start=None,end...

                                                                      时间排序

     

    在 pandas 中,有一个非常常用的函数 date_range,尤其是在处理时间序列数据时,这个函数的作用就是产生一个 DatetimeIndex,就是时间序列数据的索引。

     

    pandas.date_range(start=Noneend=Noneperiods=Nonefreq=Nonetz=Nonenormalize=Falsename=Noneclosed=None**kwargs) → pandas.core.indexes.datetimes.DatetimeIndex

    返回一个固定频率的DatetimeIndex。

    参数:

        start:str 或 datetime-like,可选,默认值是None,表示日期的起点。

        end:str 或 datetime-like,可选,默认值是None,表示日期的终点。

        periods:int,可选,默认值是None,表示你要从和这个函数产生多少个日期索引值(要生成的周期数);如果是None的话,那么 start 和 end 必须不能为 None。

        freq:str 或 DateOffset,默认 “D”,表示以自然日为单位,这个参数用来指定计时单位,比如 “5H”表示每隔5个小时计算一次。

    名称说明 
    B业务日频率 
    C自定义业务日频率 
    D日历天频率 
    W每周一次的频率 
    M月结束频率 
    SM月结频次(15次、月末) 
    BM

    业务月末频率

     
    CBM

    自定义业务月底频率

     
    MS月开始频率 
    SMS开始频率(1号、15号) 
    BMS

    业务月开始频率

     
    CBMS

    自定义业务月开始频率

     
    Q季度结束频率 
    BQ

    业务季度结束频率

     
    QS

    季度开始频

     
    BQS

    季度开始频率

     
    A, Y年底频率 
    BA, BY

    业务年度结束频率

     
    AS, YS

    年开始频

     
    BAS, BYS

    业务年度开始频率

     
    BH

    营业时间频率

     
    H每小时的频率 
    T, min

    每分钟的频率

     
    S每秒频率 
    L, ms毫秒 
    U, us微秒 
    N纳秒 

        tz:str 或 tzinfo,可选,返回本地化的DatetimeIndex的时区名称,例如' Asia/Hong_Kong '。默认情况下,生成的DatetimeIndex是与时区无关的。

    normalize:bool,默认 False。如果为 True 的话,那么在产生时间索引值之前会先把 start 和 end 都转化为当日的午夜 0 点。

    name:str,默认 None。给返回的时间索引指定一个名字。

    closed:{None, ‘left’, ‘right’},可选。默认值为 None,表示 start 和 end 这个区间端点是否包含在区间内,可以有三个值,“left” 表示左闭右开区间,“right” 表示左开右闭区间,None 表示两边都是闭区间。

    **kwargs:兼容性,对结果没影响。

    import pandas as pd, numpy as np
    
    # 创建时间序列(默认 freq="D")
    time_index = pd.date_range(start="2020-03-01", end="2020-03-15")
    print(time_index)
    # 运行结果:
    DatetimeIndex(['2020-03-01', '2020-03-02', '2020-03-03', '2020-03-04',
                   '2020-03-05', '2020-03-06', '2020-03-07', '2020-03-08',
                   '2020-03-09', '2020-03-10', '2020-03-11', '2020-03-12',
                   '2020-03-13', '2020-03-14', '2020-03-15'],
                  dtype='datetime64[ns]', freq='D')
    
    # 创建 10 个时间序列
    time_index02 = pd.date_range(start="2020-03-01", periods=10)
    print(time_index02)
    # 运行结果:
    DatetimeIndex(['2020-03-01', '2020-03-02', '2020-03-03', '2020-03-04',
                   '2020-03-05', '2020-03-06', '2020-03-07', '2020-03-08',
                   '2020-03-09', '2020-03-10'],
                  dtype='datetime64[ns]', freq='D')
    
    # 创建一个时间序列,步长 3 天
    time_index03 = pd.date_range(start="2020-03-01", periods=10, freq="3D")
    print(time_index03)
    # 运行结果:
    DatetimeIndex(['2020-03-01', '2020-03-04', '2020-03-07', '2020-03-10',
                   '2020-03-13', '2020-03-16', '2020-03-19', '2020-03-22',
                   '2020-03-25', '2020-03-28'],
                  dtype='datetime64[ns]', freq='3D')
    
    # 创建一个时间序列,以分钟为步长
    time_index04 = pd.date_range(start="2020-03-01", periods=10, freq="S")
    print(time_index04)
    # 运行结果:
    DatetimeIndex(['2020-03-01 00:00:00', '2020-03-01 00:00:01',
                   '2020-03-01 00:00:02', '2020-03-01 00:00:03',
                   '2020-03-01 00:00:04', '2020-03-01 00:00:05',
                   '2020-03-01 00:00:06', '2020-03-01 00:00:07',
                   '2020-03-01 00:00:08', '2020-03-01 00:00:09'],
                  dtype='datetime64[ns]', freq='S')
    
    data = np.random.randint(3000, 3010, 10)
    print(data)
    # 运行结果:
    [3001 3005 3001 3009 3002 3008 3002 3000 3001 3003]
    
    time_index05 = pd.Series(data, time_index04)
    print(time_index05)
    # 运行结果:
    2020-03-01 00:00:00    3001
    2020-03-01 00:00:01    3005
    2020-03-01 00:00:02    3001
    2020-03-01 00:00:03    3009
    2020-03-01 00:00:04    3002
    2020-03-01 00:00:05    3008
    2020-03-01 00:00:06    3002
    2020-03-01 00:00:07    3000
    2020-03-01 00:00:08    3001
    2020-03-01 00:00:09    3003
    Freq: S, dtype: int32

     

    展开全文
  • 2.将文件中的数据按照CommitTime排序;3.将排好序的数据每两个月作为训练数据,隔两个月作为测试数据,生成若干个文件,分别命名为:data_i_fit.csv,data_i_est.csv.比如第1、2月作为训练数据,5、6月作为测试数据。 ...

    具体实现功能:1.读取csv文件;2. 将文件中的数据按照CommitTime排序;3. 将排好序的数据每两个月作为训练数据,隔两个月作为测试数据,生成若干个文件,分别命名为:data_i_fit.csv,data_i_est.csv.比如第1、2月作为训练数据,5、6月作为测试数据。

    整个程序需要做到:1.读取文件;2.按指定列排序;3.获取文件里的指定数据;4.将数据进行有规律地划分;5.将划分的数据有规律地进行存储;6.批量存储的文件自动命名

    数据集资源已上传 (20条消息) jdt.csvpandas分类学习-专业指导文档类资源-CSDN下载

    目录

    一、导入模块

    二、 读取文件&排序

    三、 获取初始、终止时间

    四、函数 增加时间

    五、保存&结果展示

    六、完整代码

    七、参考资料


    一、导入模块

    import pandas as pd
    import datetime
    from dateutil.relativedelta import relativedelta
    import os.path
    

    二、 读取文件&排序

    path为csv文件的路径,若使用,请注意路径的更改。(如果你的python代码的文件和数据集在同一个目录下,可以直接使用地址path=r"jdt.csv",或者不嫌麻烦的话也可以写绝对路径,如:path=r"C:\……"。)

    使用pandas模块读取文件,因为文件可能会自动生成新的列,我就在打开csv的时候加了一句index_col=0。
    按照“commitdate”列的值进行排序,并将排序好的文件存储下来。

    path=r"C:\Users\86189\Desktop"
    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批量生成文件

    展开全文
  • python – pandas dataframe日期排序

    千次阅读 2021-02-10 09:17:00
    但是,在对索引进行排序时,它不会产生我想要的结果print(df.head())df['Date'] = pd.to_datetime(df['Date'])df.index = df['Date']del df['Date']df.sort_index()print(df.head())这是结果:Date ...

    我通过导入csv文件创建了一个数据帧.并将date列转换为datetime并将其作为索引.但是,在对索引进行排序时,它不会产生我想要的结果

    print(df.head())

    df['Date'] = pd.to_datetime(df['Date'])

    df.index = df['Date']

    del df['Date']

    df.sort_index()

    print(df.head())

    这是结果:

    Date Last

    0 2016-12-30 1.05550

    1 2016-12-29 1.05275

    2 2016-12-28 1.04610

    3 2016-12-27 1.05015

    4 2016-12-23 1.05005

    Last

    Date

    2016-12-30 1.05550

    2016-12-29 1.05275

    2016-12-28 1.04610

    2016-12-27 1.05015

    2016-12-23 1.05005

    这个日期实际上可以追溯到1999年,所以如果我按日期排序,它应该按升序显示数据吗?

    最佳答案 只是扩展MaxU的正确答案:您使用了正确的方法,但是,就像许多其他pandas方法一样,您必须“重新创建”数据帧才能使所需的更改生效.正如MaxU已经建议的那样,这可以通过再次输入变量来实现(将所用方法的输出“存储”到同一个变量中),例如:

    df = df.sort_index()

    或者利用属性inplace = True的力量,这将取代变量的内容,而无需重新声明它.

    df.sort_index(就地=真)

    但是,根据我的经验,我常常使用第一个选项感觉“更安全”.它看起来更清晰,更规范,因为并非所有方法都提供了就地使用.但我觉得我觉得……

    展开全文
  • 6000) In [23]: %timeit (jez(df)) 100 loops, best of 3: 3.44 ms per loop In [28]: %timeit (boud(df1)) 100 loops, best of 3: 2.52 ms per loop 时间码: df = pd.concat([df]*1000).reset_index(drop=True) ...

    您可以使用

    cumcount计算A列中的重复项,然后使用A计算

    sort_values(不需要样本,实际数据可能很重要),然后使用C.最后在

    drop删除C列:

    df['C'] = df.groupby('A')['A'].cumcount()

    df.sort_values(by=['C', 'A'], inplace=True)

    print (df)

    A B C

    0 r1 0 0

    2 r2 2 0

    4 r3 4 0

    1 r1 1 1

    3 r2 3 1

    5 r3 5 1

    df.drop('C', axis=1, inplace=True)

    print (df)

    A B

    0 r1 0

    2 r2 2

    4 r3 4

    1 r1 1

    3 r2 3

    5 r3 5

    时序:

    小df(len(df)= 6)

    In [26]: %timeit (jez(df))

    1000 loops, best of 3: 2 ms per loop

    In [27]: %timeit (boud(df1))

    100 loops, best of 3: 2.52 ms per loop

    大df(len(df)= 6000)

    In [23]: %timeit (jez(df))

    100 loops, best of 3: 3.44 ms per loop

    In [28]: %timeit (boud(df1))

    100 loops, best of 3: 2.52 ms per loop

    时间码:

    df = pd.concat([df]*1000).reset_index(drop=True)

    df1 = df.copy()

    def jez(df):

    df['C'] = df.groupby('A')['A'].cumcount()

    df.sort_values(by=['C', 'A'], inplace=True)

    df.drop('C', axis=1, inplace=True)

    return (df)

    def boud(df):

    df['C'] = df.groupby('A')['B'].rank()

    df = df.sort_values(['C', 'A'])

    df.drop('C', axis=1, inplace=True)

    return (df)

    100 loops, best of 3: 4.29 ms per loop

    展开全文
  • import pandas as pd #路径 path = './a.xlsx' #sheet_name 代表哪个sheet,0代表第一个;因为是xlsx格式,用read_excel读取 data = pd.read_excel(path, sheet_name = 0) #思路:将日期列变为索引,然后排序,便于...
  • 0.611756 True 2 baz -0.528172 False 3 foo -1.072969 True 4 bar 0.865408 False 5 baz -2.301539 True 我想A的合计总和(然后B中的值(不合计))组(C)对它进行排序。所以基本上得到A组的顺序 In [28]: df....
  • Pandas分组与排序的实现

    千次阅读 2020-12-04 20:01:38
    一、pandas分组1、分组运算过程:split->apply->combine拆分:进行分组的根据应用:每个分组运行的计算规则合并:把每个分组的计算结果合并起来2、分组函数DataFrame.groupby(by=None, axis=0, level=None, as...
  • import pandas as pdimport numpy as np#定义DataFramedict={'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]}df=pd.DataFrame(dict,index=['one','two','three'])print(df)abcone147two258three3691.Series通过索引查找可用...
  • 假设它有两列,一列是年份,另一列是我想要排序的列.import pandas as pddata = {'year': pd.Series([2006, 2006, 2007, 2007]),'value': pd.Series([5, 10, 4, 1])}df = pd.DataFrame(data)我希望每年对列“值”进行...
  • pandas 数据通过index排序

    千次阅读 2019-02-15 14:36:37
    e=pd.DataFrame(b,index=a) e 0 11 one0 10 one1 12 one2 6 one3 16 one4 13 one5 15 one6 8 ADL 5 CEL 9 CES 7 up 0 dn 14 os 4 price 2 vol 3 low 1 hi...
  • pandas时间处理、分组聚合

    千次阅读 2021-01-04 20:50:44
    import pandas as pd import numpy as np data=pd.read_excel(r'meal_order_detail.xlsx') print(data.shape) (2779, 19) print(data.columns) Index(['detail_id', 'order_id', 'dishes_id', 'logicprn_name', ...
  • pandas 日期范围筛选数据的实现</h1> <div class="info"> &nbsp;更新时间:2021年02月20日 11:54:36 &nbsp; 作者:M-finder &nbsp; </div> <div class="lbd clearfix">&...
  • pandas中dataframe索引排序实战:pandas中dataframe索引降序排序pandas中dataframe索引升序排序 目录 pandas中dataframe索引排序实战:pandas中dataframe索引降序排序pandas中dataframe索引升序排序 #...
  • Pandas分类 categorical data是指分类数据:数据类型为:男女、班级(一班、二班)、省份, 使用赋值法给变量赋值,例如(男=1,女=0),数字1, 0之间没有大小之分,不能认为1是比0大的 numerical data是指数值型...
  • === 排序 === 原数据: data1 = pd.DataFrame(np.random.randint(0,9,[5,5]), index=list('abcde'), columns=list('ABCDE')) 1...
  • pandas处理日期时间,按照时间筛选

    千次阅读 2020-12-19 16:04:51
    pandas有着强大的日期数据处理功能,本期我们来了解下pandas处理日期数据的一些基本功能,主要包括以下三个方面:日期筛选数据日期显示数据日期统计数据运行环境为 windows系统,64位,python3.5。1 读取并...
  • 27_Pandas按星期,月份,季度和年份的天计算时间序列数据的总计和平均值 将pandas.DataFrame的索引设置为DatetimeIndex对于处理具有日期和时间信息(例如日期和时间)的时间序列数据很有用。 由于DatetimeIndex可以...
  • pandas分组后排序问题

    千次阅读 2019-08-10 01:01:06
    先进行整体的sort_values,再进行grouby https://blog.csdn.net/guofei_fly/article/details/93844612
  • python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到,而pandas则可以对时间进行序列化排序
  • 文章目录一、数据整形(stack...排序(sort_values())3.统计个数(groupby().size()) 一、数据整形(stack函数) 在用pandas进行数据重排时,经常用到stack和unstack两个函数。stack的意思是堆叠,堆积,unstack即
  • Pandas对数据进行排序标记(rank函数) 现有一个问题: 数据是多个重复两遍的user_id,想新建一列,给重复的user_id标号,1和2。 具体功能如图: 使用groupby和rank函数即可实现上述功能。 具体代码如下: # 注: ...
  • 我这本文章中先导入包,读取了本地的一个文件,内容有字符串、时间。 # import导入模块 import pandas as pd import numpy as np # 读取Excel文件 data = pd.read_excel('./meal_order_detail.xlsx') print(data....
  • Pandas - 时间类型序列

    千次阅读 2019-03-14 09:13:53
    了解Pandas时间类型 应用pd.to_datetime和pd.DatetimeIndex实现时间类型转换 应用pandas.tseries.offsets实现时间的偏移 应用DatetimeIndex.shift实现时间的偏移 应用pd.date_range实现时间序列数据的生成 ...
  • Pandas按照某列值排序

    千次阅读 2019-08-06 18:47:06
    函数: pd.sort_values("feature_name",inplace=True) 表示pd按照"feature_name"这个字段排序; inplace:默认为False,如果该值为False,... ascending:默认为True,按照升序排序,为False时,按照降序排序。 ...
  • 我想做一个时间序列分析,所以我把索引作为datetimeindex.但我的索引没有根据日期安排.以下是我的数据框:Item Details Unit Op. Qty Price Op. Amt. Cl. Qty Price.1 Cl. Amt.Month2013-04-01 5 In 1 Pcs -56.0 172....
  • pandas排序和排名

    万次阅读 2018-01-07 13:17:46
    pandas提供了sort_index方法可以根据行或列的索引按照字典的顺序进行排序 a、Series排序 1、索引进行排序 #定义一个Series s = Series([1,2,3],index=["a","c","b"]) #对Series的索引进行排
  • 今天是pandas数据处理专题的第六篇文章,我们来聊聊DataFrame的排序与汇总运算。在上一篇文章当中我们主要介绍了DataFrame当中的apply方法,如何在一个DataFrame对每一行或者是每一列进行广播运算,使得我们可以在很...
  • pandas操作Excel

    2020-12-23 04:16:21
    安装pip3 install pandaspip3 install openpyxl创建数据表和文件from PyQt5.QtWidgets importQApplication,QWidgetimportsysimportpandas as pdclasswin(QWidget):def __init__(self):super().__init__()self.resize...
  • pandas中按照某一列进行排序

    千次阅读 2019-07-28 01:44:12
    """按照日期排序类""" def __init__(self, ): pass def sort_it(filename):#传入的参数是文件的名称,程序负责排好序并保存 mydf = pd.read_csv(filename, encoding='utf-8') mydf.sort_values(by=['numb...
  • pandas时间索引处理

    2021-11-17 10:04:23
    pandas时间索引处理一、读数据,把日期做为索引列二、提取时间戳到日期三、将时间戳延后 一、读数据,把日期做为索引列 import pandas as pd if __name__ == '__main__': df = pd.read_excel('ih/data/0.xlsx', ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,297
精华内容 7,318
关键字:

pandas按时间排序