【发布时间】:2015-11-02 04:47:35
【问题描述】:
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
【问题讨论】:
-
使用
.dt访问器。使用熊猫 0.17。请参阅docs。您收到错误是因为 datetime 使用单个参数,而不是数组。 -
非常有用,我会记住这一点。我现在有 0.16 的 anaconda 的一部分。
-
不应该
df['date'].dt.month==9即使在0.16.0中也能工作?
标签: python datetime numpy pandas dataframe