import pandas as pd
import io
import numpy as np
import datetime
data = """
date id
2015-10-31 50230
2015-10-31 48646
2015-10-31 48748
2015-10-31 46992
2015-11-01 46491
2015-11-01 45347
2015-11-01 45681
2015-11-01 46430
"""
df = pd.read_csv(io.StringIO(data), delimiter='\s+', index_col=False, parse_dates = ['date'])
df2 = pd.DataFrame(index=df.index)
df2['Check'] = np.where(datetime.datetime.strftime(df['date'],'%B')=='October',0,1)
我有正在使用的这个示例。这df2['Check']
是在做什么,如果df['date'] == 'October'
我分配0,否则分配1。
np.where
在其他条件下也可以正常工作,但strftime
不喜欢导致该错误的系列:
Traceback (most recent call last):
File "C:/Users/Leb/Desktop/Python/test2.py", line 22, in <module>
df2['Check'] = np.where(datetime.datetime.strftime(df['date'],'%B')=='October',0,1)
TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'Series'
如果我循环,那么我的实际数据将花费很长时间,大约为1M。我如何有效地做到这一点?
df2['Check']
应该看起来像这样:
Check
0 0
1 0
2 0
3 0
4 1
5 1
6 1
7 1
使用对象的month
属性,这是一个稍微简单的版本datetime
。如果等于10,则将true / false值映射到所需的0/1对:
df2['Check']=df.date.apply(lambda x: x.month==10).map({True:0,False:1})
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句