Pandas 中这样操作 datetime 类型,省时省力(一)!

时间问题在数据处理中是重中之重,用 Pandas 处理时间是相当方便的,但是若没有掌握一些技巧,处理起来还是很吃力。接下来我们一起看看怎样用 Pandas 高效处理时间问题,由于该部分内容比较多,我计划分两篇来讲解,本篇是第一篇。

今天我们的示例数据如下:

import pandas as pd
url = 'http://bit.ly/uforeports'
  
# read csv file 
df = pd.read_csv(url)   
df.head(5)

1、首先把 Time 字段转换为 datetime 数据类型

# Convert the Time column to datatime format 
df['Time'] = pd.to_datetime(df.Time) 
df.head(5)

2、Time 里面我只想保留年月日/年月日小时分(用 dt 方法)

# 仅保留年月日
df['Time'].dt.date.head(5)

0    1930-06-01
1    1930-06-30
2    1931-02-15
3    1931-06-01
4    1933-04-18
Name: Time, dtype: object

# 仅保留年月日小时分
df['Time'].dt.strftime('%Y-%m-%d %H:%M').head(5)

0    1930-06-01 22:00
1    1930-06-30 20:00
2    1931-02-15 14:00
3    1931-06-01 13:00
4    1933-04-18 19:00
Name: Time, dtype: object

3、分别提取年月日

df['year'] = df['Time'].dt.year 
df['month'] = df['Time'].dt.month
df['day'] = df['Time'].dt.day
df.head(5)

4、计算该天是星期几(dt.weekday_name)

df['Time'].dt.weekday_name.head(5)

0     Sunday
1     Monday
2     Sunday
3     Monday
4    Tuesday
Name: Time, dtype: object

5、计算该天是当年的第几天(df.dayofyear)

df['Time'].dt.dayofyear.head(5)

0    152
1    181
2     46
3    152
4    108
Name: Time, dtype: int64

6、计算日期所处的季度(df.quarter)

df['Time'].dt.quarter.head(5)

0    2
1    2
2    1
3    2
4    2
Name: Time, dtype: int64

以上只是介绍 dt 在处理时间格式数据的常见用法,dt 后面共有 46 个用法,所有方法名如下,需要的时候可以去查官方文档。

[i for i in dir(pd.Series.dt) if not i.startswith('_')]

['ceil',
 'components',
 'date',
 'day',
 'day_name',
 'dayofweek',
 'dayofyear',
 'days',
 'days_in_month',
 'daysinmonth',
 'floor',
 'freq',
 'hour',
 'is_leap_year',
 'is_month_end',
 'is_month_start',
 'is_quarter_end',
 'is_quarter_start',
 'is_year_end',
 'is_year_start',
 'microsecond',
 'microseconds',
 'minute',
 'month',
 'month_name',
 'nanosecond',
 'nanoseconds',
 'normalize',
 'quarter',
 'round',
 'second',
 'seconds',
 'strftime',
 'time',
 'to_period',
 'to_pydatetime',
 'to_pytimedelta',
 'total_seconds',
 'tz',
 'tz_convert',
 'tz_localize',
 'week',
 'weekday',
 'weekday_name',
 'weekofyear',
 'year']

发表评论

电子邮件地址不会被公开。