pandas将字符串转换成时间_Pandas里的日期转字符串

Pandas对时间序列的处理可以说是功能繁多,但感觉找遍了度娘,也没有发现一个能把日期处理成“2017-11”这样到月份格式的方法。后来发现了一个strftime方法,很简单:

df['time'].strftime('%Y-%m')

#以下是格式定义

代码 说明

%Y 4位数的年

%y 2位数的年

%m 2位数的月[01,12]

%d 2位数的日[01,31]

%H 时(24小时制)[00,23]

%l 时(12小时制)[01,12]

%M 2位数的分[00,59]

%S 秒[00,61]有闰秒的存在

%w 用整数表示的星期几[0(星期天),6]

%F %Y-%m-%d简写形式例如,2017-06-27

%D %m/%d/%y简写形式

举个例子:

strtime=['2000-01-31', '2000-02-29', '2000-03-31', '2000-04-30',

'2000-05-31', '2000-06-30', '2000-07-31', '2000-08-31',

'2000-09-30', '2000-10-31']

index=pd.to_datetime(strtime)

time=pd.to_datetime(strtime)

data=list(range(1,11))

df=pd.DataFrame([time,data],columns=index,index=['time','data']).T

#索引和time字段均为Timestamp格式数据

type(index[0])

Out[59]: pandas.tslib.Timestamp

type(df.index[0])

Out[60]: pandas.tslib.Timestamp

type(df.time[0])

Out[61]: pandas.tslib.Timestamp

#先来看索引

mt_time=df.index.strftime('%Y-%m')

mt_time

Out[64]:

array(['2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06',

'2000-07', '2000-08', '2000-09', '2000-10'],

dtype='

type(mt_time[0])

Out[65]: numpy.str_

#针对列(直接操作还不清楚怎么操作)

time_list=[x.strftime('%Y-%m') for x in df['time']]

time_list

Out[76]:

['2000-01',

'2000-02',

'2000-03',

'2000-04',

'2000-05',

'2000-06',

'2000-07',

'2000-08',

'2000-09',

'2000-10']

#再按月份求和

df['data'].groupby(time_list).sum()

Out[77]:

2000-01 1

2000-02 2

2000-03 3

2000-04 4

2000-05 5

2000-06 6

2000-07 7

2000-08 8

2000-09 9

2000-10 10

Name: data, dtype: int64

有的时候,真的是为了所谓的聪明(找到最优雅的方法计算结果)的办法绞尽脑汁(比如在groupby的时候怎么直接用strftime处理),而放弃了可替代的丑陋的办法。

你可能感兴趣的:(pandas将字符串转换成时间)