1.读取字符串日期

写入csv 文件

    csv_text = """date, value
2022-01-01, 1
2022-01-05, 5
2022-11-05, 5
"""
with open("date_text.csv", "w") as f:f.write(csv_text)

读取日期

df = pd.read_csv("date_text.csv")
print(df)
print(df.dtypes)

输出

         date   value
0  2022-01-01       1
1  2022-01-05       5
2  2022-11-05       5
date      objectvalue     int64
dtype: object

上面的结果中,date列的类型被读作object类型,而不是一个datetime类型
一个简单的方式是让pandas解析日期,传入参数parse_date给read_csv方法,会得到datetime对象的date列:

df = pd.read_csv("date_text.csv", parse_dates=["date"])
print(df)
print(df.dtypes)

输出

        date   value
0 2022-01-01       1
1 2022-01-05       5
2 2022-11-05       5
date      datetime64[ns]value             int64
dtype: object

pandas中融合了很强大的日期解析方法,许多类型的日期都可以自动解析

有时候数据格式是这样的:

csv_text = """y,m,d,value
2022,01,02, 2
2022,01,03, 3
2022,11,05, 5
"""
with open("date_text.csv", "w") as f:f.write(csv_text)

读取日期的方式

df = pd.read_csv("date_text.csv", parse_dates={"date": ["y", "m", "d"]})
print(df)

为了从多列中解析出一个日期列,只需要给parse_dates参数传入一个字典对象指定要解析的列即可

2.指定日期格式

对于日期01/11/2022,格式可以理解为mm/dd/yyyy解析得到2022-01-11,也可以理解为dd/mm/yyyy解析得2022-11-01,是存在这样的不同的使用格式的,要明确格式,可以指定dayfirst参数:
写入csv文件

csv_text = """date,value
01/02/2022, 2
01/03/2022, 3
11/05/2022, 5
"""
with open("date_text.csv", "w") as f:f.write(csv_text)

读取数据

df = pd.read_csv("date_text.csv", parse_dates=["date"], dayfirst=True)
print(df)
df = pd.read_csv("date_text.csv", parse_dates=["date"], dayfirst=False)
print(df)

输出

        date  value
0 2022-02-01      2
1 2022-03-01      3
2 2022-05-11      5date  value
0 2022-01-02      2
1 2022-01-03      3
2 2022-11-05      5

除了使用dayfirst参数,也可以使用参数infer_datetime_format,将其设置为True,会自动推断默认的日期类型

指定date_parser来确定自定义的特殊的日期格式
假设输入的格式是这样的:

csv_text = """date,value
Jan_01_2022, 2
Jun_03_2022, 3
NOV_05_2022, 5
"""
with open("date_text.csv", "w") as f:f.write(csv_text)

使用infer_datetime_format参数是没办法推断出日期格式的

df = pd.read_csv("date_text.csv", parse_dates=["date"], infer_datetime_format=True)
print(df)

输出

              date  value
0      Jan_01_2022      2
1      Jun_03_2022      3
2      NOV_05_2022      5

此时可以指定date_parser来执行解析

from datetime import datetime
fmt = "%b_%d_%Y"
df = pd.read_csv("date_text.csv", parse_dates=["date"], date_parser=lambda x: datetime.strptime(x, fmt))
print(df)

输出

        date  value
0 2022-01-01      2
1 2022-06-03      3
2 2022-11-05      5

麻烦的是确定strptime的日期格式,不过你可以在这个网站上参考字符串日期解析成日期对象的格式

3.转换为datetime类型

可以使用pandas的to_datetime方法(参考pandas官网):

pandas.to_datetime(arg, errors=‘raise’, dayfirst=False,
yearfirst=False, utc=None, format=None, exact=True, unit=None,
infer_datetime_format=False, origin=‘unix’, cache=True)

dt = pd.to_datetime("01 Jan, 2022")
print(dt)
dt_li = pd.to_datetime(["01 Jan, 2022", "11/11/2022", "2222/12/12"])
print(dt_li)

to_datetime方法包含了绝大多数你需要执行的操作,而且arg既可以传入一个日期字符串参数也可以传入一个日期字符串列表

4.创建范围日期

使用pandas的date_range方法创建指定范围的日期
指定开始日期start和结束日期end创建范围类的日期

date_list = ["2021-11-01", "2021-11-05"]
date_range = pd.date_range(date_list[0], date_list[1])
print(date_range)

输出

DatetimeIndex(['2021-11-01', '2021-11-02', '2021-11-03', '2021-11-04','2021-11-05'],dtype='datetime64[ns]', freq='D')

传入start日期或者end日期并传入period指定范围长度

start = "2021-11-01"
date_range1 = pd.date_range(start=start, periods=7)
print(date_range1)end = "2021-11-01"
date_range2 = pd.date_range(end=end, periods=7)
print(date_range2)
DatetimeIndex(['2021-11-01', '2021-11-02', '2021-11-03', '2021-11-04','2021-11-05', '2021-11-06', '2021-11-07'],dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2021-10-26', '2021-10-27', '2021-10-28', '2021-10-29','2021-10-30', '2021-10-31', '2021-11-01'],dtype='datetime64[ns]', freq='D')

间隔类型指定为年(Y)、月(M)、时(H)等,指定timezone已经左右开闭

# 以月份为间隔
end = "2021-11-30"
month_range1 = pd.date_range(end=end, periods=3, freq='2M')     # freq也可以用pd.offsets.MonthEnd(2)
print(month_range1)# tz指定时区
end = "2021-11-30"
month_range2 = pd.date_range(end=end, periods=3, freq='2H', tz="UTC+08:00")
print(month_range2)
# closed指定开闭区间,略
DatetimeIndex(['2021-07-31', '2021-09-30', '2021-11-30'], dtype='datetime64[ns]', freq='2M')
DatetimeIndex(['2021-11-29 20:00:00+08:00', '2021-11-29 22:00:00+08:00','2021-11-30 00:00:00+08:00'],dtype='datetime64[ns, UTC+08:00]', freq='2H')

5.提取datetime对象的date,time等部分

使用pandas的dt accessor提取datetime对象中的各部分

start = "2021-11-02"
date_range1 = pd.date_range(start=start, periods=7, tz="UTC+08:00")
df = pd.DataFrame({"value": [i for i in range(7)], "date": date_range1})
# print(df)
df["date"], df["time"], df["tz"] = df["date"].dt.date, df["date"].dt.time, df["date"].dt.tz
print(df)
# (还可以提取weekday之类的!)
# print("weekday: \n", df["date"].dt.weekday)
   value        date      time         tz
0      0  2021-11-02  00:00:00  UTC+08:00
1      1  2021-11-03  00:00:00  UTC+08:00
2      2  2021-11-04  00:00:00  UTC+08:00
3      3  2021-11-05  00:00:00  UTC+08:00
4      4  2021-11-06  00:00:00  UTC+08:00
5      5  2021-11-07  00:00:00  UTC+08:00
6      6  2021-11-08  00:00:00  UTC+08:00

6.转换时区

生成utc+8时区的一个范围时间,然后使用tz_convert方法转换时区,使用strftime方法转换格式

# 指定时区偏移
tz_offset = 8
utc_ofst = 3600*tz_offset
# 生成指定时区的范围日期
end = "2021-11-30"
dates = pd.date_range(end=end, periods=3, tz=utc_ofst)
print(dates)
# 将日期时间转换为0时区时间,然后格式化成字符串
fmt = "%Y-%m-%d %H:%M:%S"
print([date.tz_convert(pytz.utc).strftime(fmt) for date in dates])
DatetimeIndex(['2021-11-28 00:00:00+08:00', '2021-11-29 00:00:00+08:00','2021-11-30 00:00:00+08:00'],dtype='datetime64[ns, pytz.FixedOffset(480)]', freq='D')
['2021-11-27 16:00:00', '2021-11-28 16:00:00', '2021-11-29 16:00:00']

pandas处理日期的几种常用方法相关推荐

  1. pandas 按日期范围筛选数据的实现

    <h1 class="title">pandas 按日期范围筛选数据的实现</h1><div class="info">   ...

  2. pandas提取数据的6种方法

    pandas提取数据的6种方法 pandas是Python数据分析必备工具,它有强大的数据清洗能力,往往能用非常少的代码实现较复杂的数据处理. 五个方面: 比较运算:.<.>.>=. ...

  3. 运用Python爬取二手房价格与信息的两种常用方法

    最近房地产市场进一步收紧,多地地方政府出台各种收紧政策,以保证房地产健康发展,因此云朵君就想到运用Python网络爬虫,抓取部分房产信息,了解下最近房地产的情况. 接下来以房天下二手房信息,以获取某个 ...

  4. java中如何把时间封装成类,java-如何在不使用任何不推荐使用的类的情况下将日期从一种格式转换为另一种格式的日期对象?...

    java-如何在不使用任何不推荐使用的类的情况下将日期从一种格式转换为另一种格式的日期对象? 我想将date1格式的日期转换为date2格式的日期对象. SimpleDateFormat simple ...

  5. vue——props的两种常用方法

    vue--props的两种常用方法 1.实现父-->子的通信 举例如下: 父组件 parent.vue <children :channel="object1"> ...

  6. pandas基于日期信息(time or date)生成季度信息(quarter)实战:pandas基于日期信息列生成季度信息列、dt.quarter生成季度信息、dt.to_period生成季度信息

    pandas基于日期信息(time or date)生成季度信息(quarter)实战:pandas基于日期信息列生成季度信息列.dt.quarter生成季度信息.dt.to_period生成季度信息 ...

  7. pandas判断日期是否是闰年(is_leap_year)实战: 数据列转化为日期(时间)格式、判断pandas的日期数据列是否是闰年

    pandas判断日期是否是闰年(is_leap_year)实战: 数据列转化为日期(时间)格式.判断pandas的日期数据列是否是闰年 目录

  8. python电脑下载方法-python 获取机器snpython下载文件的几种常用方法

    python中下载文件常用的几个模块有urllib,urllib2,requests,方法也很简单,代码如下: 002pc.com从python 获取机器snpython下载文件的几种常用方法分析来看 ...

  9. python下载方法-python下载文件的几种常用方法

    本文信息本文由方法SEO顾问发表于2016-10-1814:34:30,共 506 字,转载请注明:python下载文件的几种常用方法_[方法SEO顾问],如果我网站的文章对你有所帮助的话,来百度口碑 ...

最新文章

  1. 防火墙iptables之常用脚本
  2. grabcut.cpp:380: error: (-215) !bgdSamples.empty() !fgdSamples.empty() in function initGMMs
  3. shell脚本自动回车_干货分享:Linux shell脚本分享!!快收藏起来吧
  4. 【NLP】图解 Attention完整版
  5. 最短路径(SPFA算法)
  6. 【Linux】一步一步学Linux——telinit命令(144)
  7. 注解能力ApplicationContext作为 IoC 容器示例
  8. 一次经典的tcp三次握手
  9. 江诗丹顿geneve系列_江诗丹顿的另一面
  10. java中int转成String位数不足前面补零 java格式化2位数不足补零
  11. 02331数据结构 散列表
  12. seo 伪原创_seo伪原创工具(解析新云查新型伪原创模式工具)
  13. LeetCode刷题(9)
  14. 荣耀系列到底算不算华为手机
  15. 用pyqt5做一个能python程序能插入图片的ide
  16. 数据结构与算法python—13.堆及python实现与leetcode总结
  17. Hadoop运行环境搭建
  18. Java Web day14
  19. 从「广义斯托克斯公式」结合「外微分公式」导出「牛顿-莱布尼茨公式」、「格林公式」、「高斯公式」、「斯托克斯公式」
  20. ARM9开发板实验笔记(1)

热门文章

  1. 获取泛型T的ClassT clazz
  2. 数据链路层中的LLC
  3. linux中rpm、yum、apt-get的关系
  4. eth一张_听说eth2.0利好落地了?那么为何eth反而涨了?
  5. mysql 自动分表_Mysql Event 自动分表
  6. python画两条曲线图_python绘制多个曲线的折线图
  7. Java笔记11-【异常、线程】
  8. 深入理解卷积层,全连接层的作用意义
  9. python 程序打包 vscode_使用VScode编写python程序并打包成.exe文件
  10. LeetCode2——Add Two Numbers(两个链表中的数字相加,形成新链表)