首页 > 其他分享 >pandas日期类型汇总

pandas日期类型汇总

时间:2023-05-16 11:22:53浏览次数:35  
标签:df 汇总 日期 HepB pd print freq pandas

pandas日期类型汇总

时间序列数据的特点是有规律地随着时间变化而变化,它们的变化趋势可以被分析和预测。时间序列分析是一种用于预测未来值或评估过去值的统计方法,常常被用于预测未来趋势、季节性变化、周期性变化、随机波动等。

1.日期类型

原始数据中,日期一般会存储为各种类型字符串,比如:

  • • 2022/5/1
  • • 2022-05-02
  • • 3/5/2022

将其统一转换为pandas的日期类型,后续统计分析时,不仅方便计算,还可以有效避免应对各种格式带来的麻烦。

1.1 pandas中6个时间相关的类

  • 对时间类型数据进行分析的前提就是将原本字符串的时间转换为标准时间类型,pandas继承了Numpy可和datetime库的时间相关模块,提供了6种时间相关的类
类名称 说明
Timestamp(时间点) 最基础的时间类,表示某个时间点。在大多数的场景中的时间数据都是以Timestamp形式的时间
Period(时间段) 表示单个时间跨度,或者某个时间段,例如某一天,某一个小时等
Timedelta(时间间隔) 表 示不同单位的时间,例如1天,1.5小时。2分钟,4秒等,而非具体的某个时间段
DatetimeIndex 一组Timestamp构成的Index,可以用来作为Series或者DataFrame的索引
PeriodtimeIndex 一组Period构成的Index,可以用来作为Series或者DataFrame的索引
TimedeltaIndex 一组Timedelta构成的Index,可以用来作为Series或者DataFrame的索引

2.日期类型的相关操作

2.1 生成日期序列

除了将数据集读取来的日期字符串转换为日期类型,我们也可以生成日期序列,这些生成的日期序列可以作为的数据索引,也可以用来补充数据集中缺失的日期值。

df = pd.DataFrame()
df["年"] = pd.date_range('2020-01-01', periods=3, freq='Y')
df["月"] = pd.date_range('2020-01-01', periods=3, freq='M')
df["日"] = pd.date_range('2020-01-01', periods=3, freq='D')
df["周"] = pd.date_range('2020-01-01', periods=3, freq='W')
df["季度"] = pd.date_range('2020-01-01', periods=3, freq='Q')


#生成10个间隔为12小时的时间数据
pd.Series(pd.date_range(start="2017-11-24",periods=10,freq="12H")) #freq取值范围比较

图片

上面的示例分别以季度为间隔,生成3条连续的时间序列。

2.2 转换为日期类型

pandasto_datetime函数对于数据集中各类日期字符串都能有效的转换。

df = pd.DataFrame(
    {
        "日期": ["2022/5/1", "2022-05-02", "3/5/2022"],
        "城市": ["合肥", "合肥", "合肥"],
        "平均气温": [28, 31, 27],
    },
)

print(df)
print(df.dtypes)


#对于多个数据列批量进行类型转换
cols = df.columns[0:]
df[cols] = df[cols].apply(pd.to_datetime)

图片

图片

可以看出,默认的日期是字符串类型且格式混乱。转换后:

df["日期"] = pd.to_datetime(df["日期"])
print(df)
print(df.dtypes)

图片

图片

日期显示起来格式统一了,类型也变为了datetime64[ns]

2.3 修改日期

修改日期的值,也是利用日期类型自带的方法,不用像修改字符串那样修改,那样极易出错。

df = pd.DataFrame()
d = pd.date_range('2020-01-01', periods=3, freq='D')
df["原始日期"] = d
df["延迟三天"] = d.shift(3, freq="D")
df["提前三天"] = d.shift(-3, freq="D")
df


#也可以应用Timedelta进行操作
#日期前移一天
df["HepB_1"] + pd.Timedelta(days = 1)
#日期后移一天
df["HepB_1"] + pd.Timedelta(days =-1)

图片

这里是按调整的,如果要按照季度等调整,像上一个例子那样设置freq参数即可。

2.4日期相关操作

1.日期选取(可以选择年、月、日、周、季度、天等)

  • 1. 通过Timestamp进行操作

    • Timestamp类常用属性
    属性名称 说明 属性名称 说明
    year week 一年中第几周
    month quarter 季度
    day weekofyear 一年中的第几周
    hour 小时 dayofyear 一年中的第几天
    minute 分钟 dayofweek 一周第几天
    second weekday 一周第几天
    date 日期 weekday_name 星期名称
    time 时间 is_leap_year 是否闰年
    df["HepB_1"][1].year
    df["HepB_1"][1].month
    df["HepB_1"][1].minute#当原始数据中没有该时间时,便会显示为0
    df["HepB_1"][1].week
    df["HepB_1"][1].dayofyear
    df["HepB_1"][1].is_leap_year#是否为闰年,返回的是布尔型
    
  • 2.通过PeriodIndex进行

    #在只需要提取部分时间特征时,如年、月等;
    df[["HepB_1","HepB_2"]] = df[["HepB_1","HepB_2"]].apply(pd.PeriodIndex,freq="M")#添加参数
    #PeriodIndex
    pd.PeriodIndex(df["HepB_1"],freq = "M")#freq指定什么输出的就到那一位,
    
  • 3.通过dt属性进行

    #年
    df = pd.DataFrame(
        {
            "日期": ["2020/5/1", "2021/5/1", "2021/6/3", "2022/9/4"],
            "平均气温": [28, 31, 27, 33],
        },
    )
    
    df["日期"] = pd.to_datetime(df["日期"])
    df["年"] = df["日期"].dt.year
    print(df)
    print(df.groupby(df["年"]).sum())
    
    #月
    df = pd.DataFrame(
        {
            "日期": ["2020/5/1", "2021/5/1", "2021/6/3", "2022/9/4"],
            "平均气温": [28, 31, 27, 33],
        },
    )
    
    df["日期"] = pd.to_datetime(df["日期"])
    df["月"] = df["日期"].dt.month
    print(df)
    print(df.groupby(df["月"]).sum()
          
    
    #周
    df = pd.DataFrame(
        {
            "日期": ["2021/5/1", "2021/5/31", "2021/6/3", "2021/9/4"],
            "平均气温": [28, 31, 27, 33],
        },
    )
    
    df["日期"] = pd.to_datetime(df["日期"])
    df["周"] = df["日期"].dt.isocalendar().week
    print(df)
    print(df.groupby(df["周"]).sum())
          
    #季度
          df = pd.DataFrame(
        {
            "日期": ["2021/5/1", "2021/5/31", "2021/6/3", "2021/9/4"],
            "平均气温": [28, 31, 27, 33],
        },
    )
    
    df["日期"] = pd.to_datetime(df["日期"])
    df["季度"] = df["日期"].dt.quarter
    print(df)
    print(df.groupby(df["季度"]).sum())    
          
          
          
    
    print(df1.dt.day)##****dt.***,只能用于series不可用于数据框
    
    df["HepB_1"].dt.is_leap_year#这样加个dt便可应用用这个数据框了	
    
  • 4.通过strftime方法进行

    t = df["日期"].dt.strftime("%Y-%m")#输出结果为:'2016-12'
    print(t) 
    

1.2日期的计算

#计算生日
age = (pd.to_datetime('2019-9-4') - pd.to_datetime('1993-5-27')) / pd.Timedelta(days=365)
print(age)

#做数据筛选
df[(pd.datetime.now()- df['发货日期']) < pd.Timedelta(days=30)]

3.时间特征索引

import pandas as pd
filepath = r"E:\Desktop\配套代码和数据集\配套代码和数据集\第3章:Pandas\Pandas代码\data\flowdata.csv"
df = pd.read_csv(filepath,index_col=0,parse_dates=True) #以时间特征我索引


df[pd.Timestamp("2012"):pd.Timestamp("2013")]
df["2013"]#选取年份
df["2012-1":"2013-03"]#选取时间间隔数据
#接下来试一试日期和小时能不能行?
df["2012-1-20":"2012-3-30"] #日期是可以的!!

df["2012-1-20 21:00:00":"2012-3-30 12:00:00"] #精确到时、分、秒也是可以的,要注意格式问题

df[(df.index.hour>8)&(df.index.hour<21)] #选取每天中在8~21点的数据

#resample函数
#原数据中每天都有好多数据,但想统计的是每天的平均指标
df.resample("D").mean().head() #求每天的平均指标
df.resample("3D").mean().head()#求每3天的平均指标
df.resample("M").min().head()#求每个月的最小值
df.resample("Y").max().head()#求每年的最大值


import pandas as pd
filepath = r"E:\Desktop\区分诊断前和诊断后.xlsx"
df = pd.read_excel(filepath,index_col=1,parse_dates=True) #在此处呢,试验了如果诊断时间(行索引中)存在空值的问题,发现当索引中有空值时
#会自动用NaT代替,并不影响操作结果

df[pd.Timestamp("2018-01-01"):pd.Timestamp("2019-01-10")]#不知道为啥这个怎么也实验不同,难受

标签:df,汇总,日期,HepB,pd,print,freq,pandas
From: https://www.cnblogs.com/yangzilaing/p/17404385.html

相关文章

  • pb中查询子窗口,动态设置查询条件,如日期
    1、可以直接如下设置 2、或者在查询组件中添加事件 ......
  • pandas 数据处理 一些常用操作
     读取csv文件,打印列名称:importpandasaspd#data=pd.read_csv("guba_fc_result_20230413.csv")data=pd.read_csv("guba_all_newtext_20230413.csv")data.columns保存文件:data.to_csv("guba_all_cutwords_20230413.csv",index=False......
  • 计算机专业就业方向汇总
            前面笔者写过关于学习的方向博文(IT软件人员的技术学习内容(写给技术迷茫中的你)-项目管理系列文章),也对项目组人员进行过总结(软件项目角色指南),但是,到了笔者这个年纪,对于计算机专业方向的人来说,选好就业方向的工作岗位内容很重要。所以,笔者就写了此博文,对当前......
  • pandas中的catagory 类型
    pandas中的catagory类型pandas中的category类型是一种用于处理分类变量的数据类型。它可以大大提高数据处理和计算效率,并减少内存占用。在某些情况下,数据中的一些变量只包含有限的可能取值,例如“性别”、“地区”等,这些变量可以归类为分类变量。如果将这些变量存储为字符串或......
  • pandas常用学习
    importpandasaspdclasspandas():def__int__(self):passdefcreat_dataframe(self):data={"a":[1,2],"b":["test1","test2"]}#使用字典加列表的形式创建dataframe,colums为字典的key,index可以自定义......
  • 安装和卸载pandas
     安装Pandaspipinstallpandas;#查看版本号pandas.__version__  卸载pandaspipuninstallpandas;     原文链接:https://aistudio.baidu.com/aistudio/projectdetail/4411791 在终端命令行中有三种安装方法,输入命令:(1)pipinstallpandas。自......
  • 数据信息汇总的7种基本技术总结
    数据汇总是一个将原始数据简化为其主要成分或特征的过程,使其更容易理解、可视化和分析。本文介绍总结数据的七种重要方法,有助于理解数据实质的内容。1、集中趋势:平均值,中位数,众数集中趋势是一种统计测量,目的是确认最典型的个体,找到最能够代表整个组的单个数值。它可以提供对数......
  • Navicat Premium 16 延长试用日期方法
    NavicatPremium只有14天的试用,那么过了试用怎么办呢,下面这使用一最简单的方法开延长使用日期把下面代码拷贝到记事本,然后重命名为:navicat延长试用.bat 注意后缀.bat  然后双击执行即可@echooffsetdn=Infosetrp=HKEY_CURRENT_USER\Software\Classes\CLSID::regdel......
  • python -- excel文件被重命名修改后缀为.csv后,使用pandas来读取时,仍会被识别为一个exc
     新建数据文件如c_data.xlsx(后缀为.xlsx),右键重命名,直接将文件后缀名一并修改,修改为“c_data.csv”读取文件里的数据data=pd.read_csv('E:/python_workspace/data_space/c_data.csv')发现报错信息如下:Traceback(mostrecentcalllast):File"E:/python_workspace/......
  • 【pandas基础】--数据整理
    pandas进行数据整理的意义在于,它是数据分析、数据科学和机器学习的前置步骤。通过数据整理可以提前了解数据的概要,缺失值、重复值等情况,为后续的分析和建模提供更为可靠的数据基础。本篇主要介绍利用pandas进行数据整理的各种方法。1.数据概要获取数据概要信息可以帮助我们了......