Pandas进阶

Pandas进阶

一,pandas中的时间和日期

Python标准库包含用于日期(date)和时间(time)数据的数据类型,而且还有日历方面的功能。
1.获取当前时间

from datetime import datetime
# 获取当前的时间
now = datetime.now()
now
#结果:   datetime.datetime(2018, 8, 6, 22, 11, 47, 600118)

2.datetime以毫秒形式储存日期和时间.datetime.timedelta表示两个datetime对象之间的时间差.

delta = datetime(2018,8,6) - datetime(2017,8,6,12,0)
delta
#结果------datetime.timedelta(364, 43200)
# 获取相差得天数
delta.days#结果---364
# 获得秒数
delta.seconds#结果---43200

3.可以给datetime对象加上或减去一个timedelta,这样就会产生一个新的对象

from datetime import datetime
from datetime import timedelta

start = datetime(2011,1,7)
start+timedelta(12)
#结果------datetime.datetime(2011, 1, 19, 0, 0)
start-2*timedelta(12)
#结果------datetime.datetime(2010, 12, 14, 0, 0)

二,字符串与日期类型的相互转换

1.时间日期对象转字符串

date = datetime(2018,8,6)
date
#结果------datetime.datetime(2018, 8, 6, 0, 0)
# 强制转化成字符串
str(date)
#结果------'2018-08-06 00:00:00'
# 格式化转化时间日期类型数据
date.strftime("%Y/%m/%d")
#结果------'2018/08/06'

2.字符串转时间对象

value = '2011-01-03'
datetime.strptime(value,'%Y-%m-%d')
#结果-----datetime.datetime(2011, 1, 3, 0, 0)

datestrs = ['7/6/2011','8/6/2011']
[datetime.strptime(x,'%m/%d/%Y') for x in datestrs]
#结果-----[datetime.datetime(2011, 7, 6, 0, 0), datetime.datetime(2011, 8, 6, 0, 0)]

3.dateutil包里parse方法将字符串转化为日期格式

# 时间日期转化工具
from dateutil.parser import parse
parse("2018-08-06")
#结果-----datetime.datetime(2018, 8, 6, 0, 0)
parse("06/08/2018",dayfirst=False)  # dayfirst=True  第一组代表日期,否则代表月份
#结果-----datetime.datetime(2018, 6, 8, 0, 0)     6月8日
parse("Jan 31 1997 10:45 PM")
#结果-----datetime.datetime(1997, 1, 31, 22, 45)

4.to_datetime方法解析日期表达形式

dateStr = ["7/6/2011","8/6/2011"]
pd.to_datetime(dateStr)
#结果-----DatetimeIndex(['2011-07-06', '2011-08-06'], dtype='datetime64[ns]', freq=None)
idx = pd.to_datetime(dateStr+[None])
idx
#结果-----DatetimeIndex(['2011-07-06', '2011-08-06', 'NaT'], dtype='datetime64[ns]', freq=None)
idx[2]
#结果-----NaT
pd.isnull(idx)
#结果-----array([False, False,  True])

5.pandas中的时间序列基础

from datetime import datetime
dates = [datetime(2011,1,2),datetime(2011,1,5),datetime(2011,1,7),
        datetime(2011,1,8),datetime(2011,1,10),datetime(2011,1,12)]
ts = Series(np.random.randn(6),index=dates)
ts
    ```
结果
2011-01-02    0.083270
2011-01-05    0.708020
2011-01-07   -1.169787
2011-01-08   -1.797083
2011-01-10    2.148670
2011-01-12    2.527151
dtype: float64
    ```
stamp = ts.index[2]
stamp
#结果----Timestamp('2011-01-07 00:00:00')
ts[stamp]# 通过时间日期类型得行索引获取对应得value值
#结果----T-1.169786729340476
ts["1/10/2011"]
#结果----T2.1486703146528634
ts["20110110"]
#结果----T2.1486703146528634
# pd.date_range(start,periods=n)
# 从start日期开始,往后推n个周期(1天为一个周期)得时间范围
longer_str = Series(np.random.randn(1000),
                    index=pd.date_range("1/1/2000",periods=1000))
longer_str.head(10)
longer_str["20000102":"20000107"]# 得到某个时间范围内的value值
longer_str["2000"]# 获取某一年的数据
longer_str["2001-05"]# 获取某一年某一月的数据
'''
pd.date_range(start,end,[periods])
start str  开始日期
edn   str  结束日期
periods str 生成时间序列的周期
'''
index = pd.date_range("4/1/2012","6/1/2012")   # start  + end 组合使用
index#获取中间日期的数据
# start + periods 
pd.date_range("4/1/2012",periods=20)

你可能感兴趣的:(Pandas进阶)