pandas系列之时间索引

283 阅读5分钟

时间索引就是根据时间来对时间格式的字段进行数据选取的一种索引方式

1 索引是时间格式的DataFrame结构

import pandas as pd
import numpy as np
​
index = pd.DatetimeIndex(
    ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07',
     '2018-01-08', '2018-01-09', '2018-01-10', "2019-03-23", "2019-05-03","2019-09-15", "2020-05-14"])
data = pd.DataFrame(np.arange(1, 15), columns=["num"], index=index)
print(data)

result:

            num
2018-01-01    1
2018-01-02    2
2018-01-03    3
2018-01-04    4
2018-01-05    5
2018-01-06    6
2018-01-07    7
2018-01-08    8
2018-01-09    9
2018-01-10   10
2019-03-23   11
2019-05-03   12
2019-09-15   13
2020-05-14   14

1.1 获取2019年的数据

index = pd.DatetimeIndex(
    ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07',     '2018-01-08', '2018-01-09', '2018-01-10', "2019-03-23", "2019-05-03","2019-09-15", "2020-05-14"])
data = pd.DataFrame(np.arange(1, 15), columns=["num"], index=index)
print(data.loc['2019'])

result:

            num

2019-03-23   11
2019-05-03   12
2019-09-15   13

1.2 获取2018年1月的数据

index = pd.DatetimeIndex(
    ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07',     '2018-01-08', '2018-01-09', '2018-01-10', "2019-03-23", "2019-05-03","2019-09-15", "2020-05-14"])
data = pd.DataFrame(np.arange(1, 15), columns=["num"], index=index)
print(data.loc['2018-01'])

result:

            num

2018-01-01    1
2018-01-02    2
2018-01-03    3
2018-01-04    4
2018-01-05    5
2018-01-06    6
2018-01-07    7
2018-01-08    8
2018-01-09    9
2018-01-10   10

1.3 获取2018年1月1日到2018年1月5日的数据

index = pd.DatetimeIndex(
    ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07',     '2018-01-08', '2018-01-09', '2018-01-10', "2019-03-23", "2019-05-03","2019-09-15", "2020-05-14"])
data = pd.DataFrame(np.arange(1, 15), columns=["num"], index=index)
print(data.loc['2018-01-01': "2018-01-05"])

result:

            num

2018-01-01    1
2018-01-02    2
2018-01-03    3
2018-01-04    4
2018-01-05    5

1.4 获取2019年3月23日的数据

index = pd.DatetimeIndex(
    ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07',     '2018-01-08', '2018-01-09', '2018-01-10', "2019-03-23", "2019-05-03","2019-09-15", "2020-05-14"])
data = pd.DataFrame(np.arange(1, 15), columns=["num"], index=index)
print(data.loc['2019-03-23': "2019-03-23"])

result:

            num

2019-03-23   11

2 索引不是时间格式的DataFrame结构

此时所用的表格内容如下:

image-20210727233241935.png

先来看一下原始的数据

import pandas as pd
​
​
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df)

result:

   姓名  年龄 性别       入职时间    职位
0  张三  25   2019-09-23    销售
1  安迪  32   2016-06-14    总监
2  王二  67   2020-03-08    后勤
3  李二  45   2018-09-17  销售经理

2.1选取成交时间为2018年9月17日的订单

import pandas as pd
from datetime import datetime
​
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df[df['入职时间'] == datetime(2018, 9, 17)])

result:

   姓名  年龄 性别       入职时间    职位
3  李二  45   2018-09-17  销售经理

2.2 选取成交时间为2019年10月1日以后的订单

df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df[df['入职时间'] > datetime(2019, 9, 15)])

result:

   姓名  年龄 性别       入职时间  职位
0  张三  25   2019-09-23  销售
2  王二  67   2020-03-08  后勤

2.3 选取成交时间为2019年1月1日以前的订单

df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df[df['入职时间'] < datetime(2019, 1, 1)])

result:

   姓名  年龄 性别       入职时间    职位
1  安迪  32   2016-06-14    总监
3  李二  45   2018-09-17  销售经理

2.4 选取成交时间为2018年1月1日到2020年1月1日的订单

df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df[(df['入职时间'] > datetime(2018, 1, 1)) & (df['入职时间'] < datetime(2020, 1, 1))])

result:

   姓名  年龄 性别       入职时间    职位
0  张三  25   2019-09-23    销售
3  李二  45   2018-09-17  销售经理