python padas 处理日期数据

来源:互联网 发布:celery python廖雪 编辑:程序博客网 时间:2024/05/16 11:55

数据类型及操作

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)








0 0