首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >pandas时间处理

pandas时间处理

作者头像
皮大大
发布2021-03-01 13:21:42
发布2021-03-01 13:21:42
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

pandas处理技巧-时间处理

记录pandas中关于时间的两个处理技巧

  • 字符串类型和datatimens类型的转化
  • 如何将时分秒类型的数据转成秒为单位的数据

字符串和时间格式转化

报错
代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd
from datetime import datetime
import time

当我们导入包含日期数据的时候,有时候需要进行前期的处理,比如:读进来一份包含年月字段的数据

代码语言:javascript
代码运行次数:0
运行
复制
df.dtypes  # datetime64[ns]类型数据

当查看数据字段信息的时候发现,发现它是datetime64[ns]类型。

目的是想获取年月信息,去掉最后的01,只取前面的年月,当直接使用split方法的时候,报错如下:

解决

1、先转成字符串类型

代码语言:javascript
代码运行次数:0
运行
复制
df["年月"] = df["年月"].apply(lambda x: x.strftime('%Y-%m-%d'))

2、对字符串数据使用split方法

代码语言:javascript
代码运行次数:0
运行
复制
df["年月"] = df["年月"].apply(lambda x: x.split("-")[0] + "-" + x.split("-")[1].split("-")[0])

3、如何将字符串又转成datetime64[ns]的数据类型??

代码语言:javascript
代码运行次数:0
运行
复制
df["年月"] = pd.to_datetime(df["年月"], format = "%Y-%m-%d")

时分秒的处理

目的

1、记录?一次时分秒时间的处理。有平均时长这样一个字段:时:分:秒

2、想将上述时长全部转成秒:小时*24+分钟*60+秒

处理步骤

1、转成字符串并单独取出时分秒

代码语言:javascript
代码运行次数:0
运行
复制
# 1、先转成字符串
df["平均访问时长"] = df["平均访问时长"].apply(lambda x: x.strftime('%H-%M-%S'))   # 先转成字符串

# 2、切割出时分秒
df["小时"] = df["平均访问时长"].apply(lambda x: x.split("-")[0])
df["分钟"] = df["平均访问时长"].apply(lambda x: x.split("-")[1].split("-")[0])  # df["平均访问时长"].apply(lambda x: x.split("-")[-2]) 倒数第二位
df["秒"] = df["平均访问时长"].apply(lambda x: x.split("-")[-1])  # 取出倒数第一位数据

2、检查时、分、秒的统计情况

  • 没有超过1个小时的数据
  • 有00分和超过10分的数据,需要特殊处理;秒也是类似情况

3、分钟的特殊处理

pandas中判断某个字符串的开始和结尾字符:startswith()、endswith();使用了if循环来进行判断:

  • 如果是0开头,但不是0结尾:取出后面的数值
  • 如果是不是0开头,就是数据本身
  • 除了上面两种,剩下的就是00,直接赋值为0
代码语言:javascript
代码运行次数:0
运行
复制
for i in range(len(df)):
    if df.loc[i,"分钟"].startswith("0") == True and df.loc[i,"分钟"].endswith("0") == False:  # 08
        df.loc[i,"分钟"] = df.loc[i,"分钟"].split("0")[1]
    elif df.loc[i,"分钟"].startswith("0") == False:  # 30
        df.loc[i,"分钟"] = df.loc[i,"分钟"]
    elif df.loc[i,"分钟"] == "00":  # 00则赋值为0
        df.loc[i,"分钟"] = "0"

4、处理过后的数据(分钟)

5、计算总共的时长(秒为单位)

需要将每个字符串的数据转成int类型,再进行处理

代码语言:javascript
代码运行次数:0
运行
复制
# 时长:分钟*60 + 秒

for i in range(len(df)):
    df.loc[i,"时长"] = int(df.loc[i,"分钟"]) * 60 + int(df.loc[i,"秒"])
df
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-2-3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pandas处理技巧-时间处理
  • 字符串和时间格式转化
    • 报错
    • 解决
  • 时分秒的处理
    • 目的
    • 处理步骤
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档