您的位置:首页 > 编程语言 > Python开发

python pandas 处理日期数据

2016-09-11 16:34 609 查看
数据类型及操作

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: