Pandas个人笔记一、安装与时间处理

前言

Pandas与Numpy是数据统计中的两大神器,在日常工作中,我主要把Numpy用于列表处理,Pandas用于字典处理,Pandas可以把字典表现为表格式,然后我们可以通过对表进行查询过滤排序分组等处理,取得我们想要的数据。

Pandas安装与调用

推荐使用Python3.x及以上版本,文章使用Python版本为3.6.8。

安装

1
pip install pandas

调用

一般使用会把pandas缩写成pd,方便调用。

1
2
3
4
5
6
7
>>> import pandas as pd
>>> df = pd.DataFrame({"Name":["a","b","c"], "Age":[5,6,4]})
>>> df
Name Age
0 a 5
1 b 6
2 c 4

时间处理

Pandas的关于时间处理函数有date_range,datetime,timedelta_range

date_range – 日期范围

就像函数名表示的一样,这个函数用于获取日期范围,你可以给出两个参数(开始日期,结束日期),得到中间的日期范围,或是给出(开始日期,天数),得到日期加天数范围内的时间。

例子与使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 使用(开始日期,结束日期)得日期范围,dtype为日期输出格式,freq代表日期单位,默认'D',代表以日计算
>>> date = pd.date_range(start='20191111',end='20191115')
>>> date
DatetimeIndex(['2019-11-11', '2019-11-12', '2019-11-13', '2019-11-14',
'2019-11-15'],
dtype='datetime64[ns]', freq='D')


# 使用(开始时间,天数)得日期范围
>>> otherdate = pd.date_range(start='20191111',periods=6)
>>> otherdate
DatetimeIndex(['2019-11-11', '2019-11-12', '2019-11-13', '2019-11-14',
'2019-11-15', '2019-11-16'],
dtype='datetime64[ns]', freq='D')

# 改变日期单位dtype为'M',代表以月为单位,默认输出月底最后一天
>>> pd.date_range(start='20191111',periods=6, freq='M')
DatetimeIndex(['2019-11-30', '2019-12-31', '2020-01-31', '2020-02-29',
'2020-03-31', '2020-04-30'],
dtype='datetime64[ns]', freq='M')

# 改变日期单位dtype为'B',代表以工作日为单位,跳过周六日,输出工作日,如下16号17号为周六休息日,所以不输出
DatetimeIndex(['2019-11-11', '2019-11-12', '2019-11-13', '2019-11-14',
'2019-11-15', '2019-11-18'],
dtype='datetime64[ns]', freq='B')

# 遍历打印时间
>>> for day in otherdate:
... print(day)
...
2019-11-11 00:00:00
2019-11-12 00:00:00
2019-11-13 00:00:00
2019-11-14 00:00:00
2019-11-15 00:00:00
2019-11-16 00:00:00

# 输出时间间隔
>>> otherdate[-1]-otherdate[0]
Timedelta('5 days 00:00:00')

>>> (otherdate[-1]-otherdate[0]).days
5

# 按想要的格式输出日期范围
>>> otherdate.strftime('%Y-%m-%d').tolist()
['2019-11-11', '2019-11-12', '2019-11-13', '2019-11-14', '2019-11-15', '2019-11-16']

dtype还有很多单位,如秒(S)、分(T)、时(H)、月始(MS)、月末(M)、季始(QS)、季末(Q)、年(A)等等,可以去官网查看完整列表。

datetime – 日期

datetime是日期函数,参数为(year,month,day,hour,minute,second),可以用于日期格式转化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> date = pd.datetime(2020,12,30,5,0,1)
>>> date
datetime.datetime(2020, 12, 30, 5, 0, 1)

# 时间戳
>>> date.timestamp()
1609275601.0

# 时间格式
>>> date.strftime('%Y-%m-%d')
'2020-12-30'

# 周几,注意这里的默认时间不是东八区北京时间,是标准UTC时间
>>> date.weekday()
2

timedelta_range – 时间差

timedelta_range与date_range相似,但它只求差,不需要日期。所需参数为(start,end,periods,freq,name,closed),四个参数start、end、periods、freq必须选指定三个。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 按小时算时间差
>>> pd.timedelta_range(start=0, periods=10, freq='H')
TimedeltaIndex(['00:00:00', '01:00:00', '02:00:00', '03:00:00', '04:00:00',
'05:00:00', '06:00:00', '07:00:00', '08:00:00', '09:00:00'],
dtype='timedelta64[ns]', freq='H')

# 按日算时间差
>>> pd.timedelta_range(start=0, periods=10, freq='D')
TimedeltaIndex(['0 days', '1 days', '2 days', '3 days', '4 days', '5 days',
'6 days', '7 days', '8 days', '9 days'],
dtype='timedelta64[ns]', freq='D')

# freq指定时间频率,除了H,D,还能精确时间时隔,如隔3小时
>>> pd.timedelta_range(start=0, periods=10, freq='3H')
TimedeltaIndex(['0 days 00:00:00', '0 days 03:00:00', '0 days 06:00:00',
'0 days 09:00:00', '0 days 12:00:00', '0 days 15:00:00',
'0 days 18:00:00', '0 days 21:00:00', '1 days 00:00:00',
'1 days 03:00:00'],
dtype='timedelta64[ns]', freq='3H')

# 可以把指定的天数按比例划分,如把五天分成四份。
>>> pd.timedelta_range(start='1 day', end='5 days', periods=4)
TimedeltaIndex(['1 days 00:00:00', '2 days 08:00:00', '3 days 16:00:00',
'5 days 00:00:00'],
dtype='timedelta64[ns]', freq=None)

- - END - -


腾讯云
0%