我正在使用pandas
和arrow
日期时间扩展程序包来操作某些日期。我的代码如下:
srs = pd.Series(['2016-10-02T00:24:15.707Z','2016-10-02T00:24:27.294Z','2016-10-02T01:15:56.682Z'])
dt = srs.apply(arrow.get,tz="Europe/Paris")
ym = dt.apply(arrow.arrow.Arrow.format,'MMM-YY')
print(ym)
打印:
0 2016-10-02 00:24:15+00:00
1 2016-10-02 00:24:27+00:00
2 2016-10-02 01:15:56+00:00
dtype: object
和
yearmonths=[]
for ind,row in dt.iteritems():
yearmonth = row.format('MMM-YY')
yearmonths.append(yearmonth)
print(yearmonths)
打印:
['Oct-16', 'Oct-16', 'Oct-16']
我不明白为什么最上面的代码块不会产生与下块相同的输出,因为在我看来它应该是。我错过了什么或这是一个错误吗?
答案 0 :(得分:4)
您可以使用内部Pandas方法实现相同的目标:
In [54]: pd.to_datetime(srs).dt.tz_localize('Europe/Paris').dt.strftime('%b-%y')
Out[54]:
0 Oct-16
1 Oct-16
2 Oct-16
答案 1 :(得分:2)
apply
函数将序列中的值作为参数应用到format
函数中。因此,它不会返回你想要的东西。基本上,考虑应用为执行以下操作(伪代码):
for value in the_series:
format(value, 'MMM-YY')
但format
的签名是format(your_date_format)
如果您想使用apply
并获得与底部相同的结果,则必须创建自定义函数:
def format_date(date):
return date.format('MMM-YY')
ym = dt.apply(format_date)
结果:
0 Oct-16
1 Oct-16
2 Oct-16
答案 2 :(得分:1)
如果你跑
怎么办? ym = dt.apply(lambda x: x.format('MMM-YY'))
代替?这更类似于您在iteritems
示例中所做的事情。