首页 > 其他分享 >【pandas基础】--日期处理

【pandas基础】--日期处理

时间:2023-06-02 15:25:00浏览次数:37  
标签:01 -- df 日期 2021 pd print pandas

时间序列数据是数据分析中一类常见且重要的数据。
它们按照时间顺序记录,通常是从某些现象的观察中收集的,比如经济指标、气象数据、股票价格、销售数据等等。

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

1. 日期类型

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

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

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

1.1 转换为日期类型

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

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

print(df)
print(df.dtypes)

image.pngimage.png

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

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

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

1.2 生成日期序列

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

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')
df

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

1.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

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

2. 日期属性

将数据转换为pandas日期类型的最大好处就是可以使用日期类型特有的属性,方便进行各个维度的分析。

常用的日期维度是年,月,日,周,季度。

2.1 年

利用日期属性按年份统计合计值:

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())

image.png
两个2021年的数据统计了合计值。

2.2 月

按月统计合计值:

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())

image.png
两个5月份的数据统计了合计值。

2.3 日

按日统计合计值:

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.day
print(df)
print(df.groupby(df["日"]).sum())

image.png
两个1号的数据统计了合计值。

2.4 周

按周统计合计值:

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())

image.png
上面两个日期同属于第22周,所以计算了合计值。
获取周属性与前面略有不同,不是直接获取week,而是用isocalendar().week

2.5 季度

按季度统计合计值:

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())

image.png
上面3个日期都是第二季度,所以计算了合计值。

3. 总结回顾

本篇特意将pandas中的日期类型单独介绍,
一方面是因为日期类型与其他类型相比,多出了很多特有的属性;
另一方面,时间序列数据和回归分析中也会大量用到日期类型。

这里介绍了日期类型的转换方法和常用属性,但日期类型不仅仅限于这些属性,其他的属性可以参考pandas的官方文档:Index objects — pandas 2.0.1 documentation

标签:01,--,df,日期,2021,pd,print,pandas
From: https://www.cnblogs.com/wang_yb/p/17451858.html

相关文章

  • 导入keras报错Process finished with exit code -1073741819 (0xC0000005)
    1. 遇到报错问题导入keras报错Processfinishedwithexitcode-1073741819(0xC0000005) 查看chatgpt后,给出的解答如下:2.  tensorflow与keras兼容问题关于版本兼容问题,以下是chatGPT3.5给的答案,具体更多兼容版本对应关系可以查看文章末尾的链接。 3.......
  • 2万多条初中历史题库ACCESS\EXCEL数据库
    这段时间破解了中高学生知识题库,包含高中英语题库、小学英语题库、初中地理题库、初中历史题库、高中历史题库、初中生物题库,数据表结构都一样,今天发的这份是上万条的初中历史题库,截图包含所有字段,截图下方有显示共有记录数。参考项有:步入近代(1484)、国家的产生和社会的变革(12......
  • 刷学习次数
    第一步:首先先打开自己的浏览器。第二步:登录自己的学习通账号。第三步:点击需要学习的课程。第四步:进入课程里面学习的章节内容第五步:按下电脑的按键“f12”键第六步:点击"Console"第七步:将下面我发的代码复制粘贴到“Console”里面,然后敲回车键,会弹出一个界面填写刷新时间。......
  • w task 2- main body paragraphs
    2mainbodyparagraphs5sentencesineach90to100wordseach topicvocabularymattersmore.(advantages,disadvantages,problems,solutions)FirstlySecondsFinally. Thereareseveralreasonswhyiwouldargueagainst.... Firstly...Forexample,......
  • 划分数组专题
    一般采用回溯法思想,但需要将问题进行转化,同时采用动态规划减小时间复杂度1.分割等和子数组2.目标和3.划分k个相等的子集4.三等分......
  • 《加密与解密》- 第一章 - 基础知识 - 笔记
    (纠正了书中一些不正确的地方,如P11中2**64bytes等于16TB已修改为16EB)1.1什么是加密与解密1.1.1软件的加密与解密略1.1.2软件逆向工程内容:去除使用限制或者添加功能获得源代码硬件的复制和模拟要求品质:保持好奇,崇尚自由勤奋+毅力精通至少一门编程语言,尤其是编程思......
  • Java+Js实现文件下载
    Maven依赖<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.9.0</version></dependency>页面<!DOCTYPEhtml><......
  • transformers入门使用
    transformers入门使用HuggingFace是一个开源社区,它提供了先进的NLP模型,数据集,以及其他工具。模型:https://huggingface.co/models数据集:https://huggingface.co/datasets主要的模型自然回归:GPT2,Trasnformer-XL,XLNet自编码:BERT,ALBERT,ROBERTa,ELECTRASto......
  • 如何4天快速入门性能测试
    在现代软件开发中,性能测试是至关重要的步骤之一。它可以帮助我们确定系统的负载极限和稳定性,以确保应用程序和网站在高流量期间仍然能够正常运行。但是,性能测试通常需要大量的时间和资源,对于初学者而言可能会感到有些棘手。以下是4天快速入门性能测试的步骤,帮助您开始追踪应用程序......
  • AtCoder Beginner Contest 286(G)
    AtCoderBeginnerContest286(G)G(欧拉路径)G题意大致为\(n\)个点,\(m\)个边的图,然后给出\(k\)条边的编号,问我们这\(k\)条边可不可以在一条路径上(每条边都可以经过)对于可不可以存在一条路径,里面包含个题目所给的\(k\)条边,其实就是问是否存在一条路可以经历这\(k\)条边,然后我们......