搜索

查看: 3092|回复: 11

[Python] Pandas.DataFrame时间序列数据处理的实现

[复制链接]
发表于 2023-5-4 17:21:44 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:21:44 3092 11 看全部
目录
  • 如何将一列现有数据指定为DatetimeIndex
  • 读取CSV时如何指定DatetimeIndex
  • 关于pandas.Series将pandas.DataFrame,pandas.Series的索引设置为datetime64 [ns]类型时,将其视为DatetimeIndex,并且可以使用各种处理时间序列数据的函数。
    可以按年或月指定行,并按切片指定提取周期,这在处理包含日期和时间信息(例如日期和时间)的数据时非常方便。
    在此,将对以下内容进行描述。
  • 如何将一列现有数据指定为DatetimeIndex
  • 读取CSV时如何指定DatetimeIndex
  • 关于pandas.Series
    如何将一列现有数据指定为DatetimeIndex
    将pandas.DataFrame与默认的基于0的索引和一个字符串列作为日期。
    import pandas as pd
    df = pd.read_csv('./data/26/sample_date.csv')
    print(df)
    #           date  val_1  val_2
    # 0   2017-11-01     65     76
    # 1   2017-11-07     26     66
    # 2   2017-11-18     47     47
    # 3   2017-11-27     20     38
    # 4   2017-12-05     65     85
    # 5   2017-12-12      4     29
    # 6   2017-12-22     31     54
    # 7   2017-12-29     21      8
    # 8   2018-01-03     98     76
    # 9   2018-01-08     48     64
    # 10  2018-01-19     18     48
    # 11  2018-01-23     86     70
    print(type(df.index))
    #
    print(df['date'].dtype)
    # object
    将to_datetime()应用于日期字符串列,并转换为datetime64 [ns]类型。
    df['date'] = pd.to_datetime(df['date'])
    print(df['date'].dtype)
    # datetime64[ns]
    使用set_index()方法将datetime64 [ns]类型的列指定为索引。
    Pandas.DataFrame,重置列的行名(set_index)
    索引现在是DatetimeIndex。索引的每个元素都是时间戳类型。
    df.set_index('date', inplace=True)
    print(df)
    #             val_1  val_2
    # date                    
    # 2017-11-01     65     76
    # 2017-11-07     26     66
    # 2017-11-18     47     47
    # 2017-11-27     20     38
    # 2017-12-05     65     85
    # 2017-12-12      4     29
    # 2017-12-22     31     54
    # 2017-12-29     21      8
    # 2018-01-03     98     76
    # 2018-01-08     48     64
    # 2018-01-19     18     48
    # 2018-01-23     86     70
    print(type(df.index))
    #
    print(df.index[0])
    print(type(df.index[0]))
    # 2017-11-01 00:00:00
    #
    可以按年或月指定行,并按切片提取周期。
    print(df['2018'])
    #             val_1  val_2
    # date                    
    # 2018-01-03     98     76
    # 2018-01-08     48     64
    # 2018-01-19     18     48
    # 2018-01-23     86     70
    print(df['2017-11'])
    #             val_1  val_2
    # date                    
    # 2017-11-01     65     76
    # 2017-11-07     26     66
    # 2017-11-18     47     47
    # 2017-11-27     20     38
    print(df['2017-12-15':'2018-01-15'])
    #             val_1  val_2
    # date                    
    # 2017-12-22     31     54
    # 2017-12-29     21      8
    # 2018-01-03     98     76
    # 2018-01-08     48     64
    还可以指定各种格式的行。
    print(df.loc['01/19/2018', 'val_1'])
    # 18
    print(df.loc['20180103', 'val_2'])
    # 76
    读取CSV时如何指定DatetimeIndex
    如果原始数据是CSV文件,则在使用read_csv()进行读取时可以指定DatetimeIndex。
    在参数index_col中指定要用作索引的日期和时间数据的列名(或从0开始的列号),并将parse_dates设置为True。
    df = pd.read_csv('./data/26/sample_date.csv', index_col='date', parse_dates=True)
    print(df)
    #             val_1  val_2
    # date
    # 2017-11-01     65     76
    # 2017-11-07     26     66
    # 2017-11-18     47     47
    # 2017-11-27     20     38
    # 2017-12-05     65     85
    # 2017-12-12      4     29
    # 2017-12-22     31     54
    # 2017-12-29     21      8
    # 2018-01-03     98     76
    # 2018-01-08     48     64
    # 2018-01-19     18     48
    # 2018-01-23     86     70
    print(type(df.index))
    #
    如果CSV文件的日期字符串为非标准格式,请在read_csv()的参数date_parser中指定由lambda表达式定义的解析器。
    parser = lambda date: pd.to_datetime(date, format='%Y年%m月%d日')
    df_jp = pd.read_csv('./data/26/sample_date_cn.csv', index_col='date', parse_dates=True, date_parser=parser)
    print(df_jp)
    #             val_1  val_2
    # date
    # 2017-11-01     65     76
    # 2017-11-07     26     66
    # 2017-11-18     47     47
    # 2017-11-27     20     38
    # 2017-12-05     65     85
    # 2017-12-12      4     29
    # 2017-12-22     31     54
    # 2017-12-29     21      8
    # 2018-01-03     98     76
    # 2018-01-08     48     64
    # 2018-01-19     18     48
    # 2018-01-23     86     70
    print(type(df_jp.index))
    #
    关于pandas.Series
    这可能不是实际的模式,但是如果pandas.Series索引是日期字符串。
    s = pd.read_csv('./data/26/sample_date.csv', index_col=0, usecols=[0, 1], squeeze=True)
    print(s)
    # date
    # 2017-11-01    65
    # 2017-11-07    26
    # 2017-11-18    47
    # 2017-11-27    20
    # 2017-12-05    65
    # 2017-12-12     4
    # 2017-12-22    31
    # 2017-12-29    21
    # 2018-01-03    98
    # 2018-01-08    48
    # 2018-01-19    18
    # 2018-01-23    86
    # Name: val_1, dtype: int64
    print(type(s))
    print(type(s.index))
    #
    #
    如果要将此索引转换为DatetimeIndex,则可以通过将用to_datetime转换的索引替换为属性索引来覆盖它。
    s.index = pd.to_datetime(s.index)
    print(s)
    # date
    # 2017-11-01    65
    # 2017-11-07    26
    # 2017-11-18    47
    # 2017-11-27    20
    # 2017-12-05    65
    # 2017-12-12     4
    # 2017-12-22    31
    # 2017-12-29    21
    # 2018-01-03    98
    # 2018-01-08    48
    # 2018-01-19    18
    # 2018-01-23    86
    # Name: val_1, dtype: int64
    print(type(s))
    print(type(s.index))
    #
    #
    print(s['2017-12-15':'2018-01-15'])
    # date
    # 2017-12-22    31
    # 2017-12-29    21
    # 2018-01-03    98
    # 2018-01-08    48
    # Name: val_1, dtype: int64
    到此这篇关于Pandas.DataFrame时间序列数据处理的实现的文章就介绍到这了,更多相关Pandas.DataFrame时间序列内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-28 23:00:28 | 显示全部楼层
    掌舵的鱼1987 2023-6-28 23:00:28 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-29 01:00:53 | 显示全部楼层
    123456819 2023-6-29 01:00:53 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    发表于 2023-6-29 09:22:35 | 显示全部楼层
    贰十岁装成熟装s 2023-6-29 09:22:35 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-29 10:56:05 | 显示全部楼层
    123456825 2023-6-29 10:56:05 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-29 18:48:13 | 显示全部楼层
    当当当当裤裆坦 2023-6-29 18:48:13 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-30 00:04:12 | 显示全部楼层
    ffycxyw2274436 2023-6-30 00:04:12 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-30 00:10:08 | 显示全部楼层
    落败的青春阳落s 2023-6-30 00:10:08 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    发表于 2023-6-30 09:39:35 | 显示全部楼层
    伊索谗言 2023-6-30 09:39:35 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    回复

    使用道具 举报

    发表于 2023-6-30 10:09:28 | 显示全部楼层
    小妖花满楼满fx 2023-6-30 10:09:28 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表