数据类型及操作
Python 标准库的datetime
datetime模块中的datetime,time,calendar等类都可以用来存储时间类型以及一些其他转换与运算
for example:
from datetime import datetime
now=datetime.now()
print now
#2016-09-11 16:02:35.788000
delta=datetime(2010,2,2)-datetime(2010,2,1)
#2016-09-12 16:04:01.845000
ddatetime的对象见的减法运算会得到一个timedelta对象,表示一个时间段
datetime 对象与它所保存的字符格式时间戳之间可以相互转化,str()函数可用,更推荐datetime.strptime()。这2两个方法之间可以相互转换
str(now)
now.strftime('%Y-%m-%d')
print now.strftime('%Y-%m-%d %H:%M:%S %Z')
strptime and strptime ---------------------------
datetiem.strptime('2001-10-1','%Y-%m-%d') # can not be strftime
将格式为datetime 转换为 TimeStamp
pd.to_datetime(now)
pandas的时间序列
dates=[ datetime(2001,1,1) , datetime(2001,1,2) , datetime(2001,1,3)]
ts=Series(np.random.randn(3) , index=dates)
type(ts) ts.index ts.index[0] ts['2011'] ts['2011-1']
日期的范围,频率,以及移动
pandas的时间序列一般被默认为不规则的,即没有固定的频率,但出于分析的需要,我们可以通过插值的方式将序列转换为固定频率的格式,可以使用快捷方式 .resample(rule)
>>>ts
2011-01-010.362289
2011-01-020.586695
2011-01-03-0.154522
2011-01-060.222958
dtype: float64
>>>ts.resample('D')
2011-01-010.362289
2011-01-020.586695
2011-01-03-0.154522
2011-01-04 NaN
2011-01-0N NaN
2011-01-060.222958
Freq: D,dtype: float64
生成日期范围
pd.date_range()可用于生成指定长度的DateIndex。 参数可以是起始结束日期,或者只有一个日期,加一个时间段参数。日期是可以包含的
pd.date_range('20100101','20100110')
pd.date_range(start='20100101',periods=10)
pd.date_range(end='20100101',periods=10)
频率和日期偏移量
print pd.date_range("00:00","12:00",freq='20s')
移动(超前和滞后)数据 Series和DataFrame都有一个.shift()方法执行单纯的移动操作,index维持不变
ts.shift(2) ts.shift(-2) 会出现NaN 值前后移动
移动 index
ts.shift(2,freq='D') ts.shift(-2,freg='D')
Series(np.random.randn(5),index=pd.period_range('201001','201005',freq='M'))
改变日期的频率
ts.asfreq('M',how='start')
---------------------------------------------------------------------------------------------------------------
# -*- coding:utf-8 -*-
import pandas as pd
import numpy as np
from numpy.random import seed
from numpy.random import rand
from numpy.random import random_integers
seed(42)
df=pd.DataFrame(
{
'Weather':['cold','hot','cold','hot','cold','hot','cold'],
'Food':['soup','soup','icecream','chocolate','icecream','icecream','soup'],
'Price':10*rand(7),
'Number':random_integers(1,9,size=(7,))
}
)
print df
print pd.pivot_table(df,cols=['Food'],aggfunc=np.sum)
print "Concat Back together\n",pd.concat([df[:3],df[5:]])
print "Append rows\n",df[:3].append(df[5:])
dest=pd.read_csv('data.csv')
print 'dest\n',dest
#print pd.isnull(dest).sum()
print dest[dest.columns[-1]].fillna(3)