我在减去日期列的一部分时遇到了问题。我的目标是建立一个队列分析表。为了实现这一目标,我想在我的pandas数据框中获得任何客户的订购月份。
OrderDate ConsumerId Orders
0 2017-09-01 5555555 4
1 2017-09-01 66666666666 2
2 2017-09-01 88888888888 4
3 2017-09-01 9999999999 3
4 2017-09-01 45858888 3
我使用下面的代码执行此操作。
import pandas as pd
pd.set_option('max_columns', 50)
mpl.rcParams['lines.linewidth'] = 2
df = pd.read_csv("C:/Users/***/****/salesdata.csv")
df.head()
df['OrderPeriod'] = df.OrderDate.apply(lambda x: x.strftime('%Y-%m'))
Unfurtantely我在尝试减去订购月份时收到以下错误。
df['OrderPeriod'] = df.OrderDate.apply(lambda x: x.strftime('%Y-%m'))
AttributeError: 'str' object has no attribute 'strftime'
我的pandas数据框如下所示:
OrderDate ConsumerId Orders
0 2017-09-01 5555555 4
1 2017-09-01 66666666666 2
2 2017-09-01 88888888888 4
3 2017-09-01 9999999999 3
4 2017-09-01 45858888 3
我的目标是添加一个新列,其中包含消费者订购的月份。如下。
OrderDate ConsumerId Orders OrderPeriod
0 2017-09-01 5555555 4 2017-09
1 2017-09-01 66666666666 2 2017-09
2 2017-09-01 88888888888 4 2017-09
3 2017-09-01 9999999999 3 2017-09
4 2017-09-01 45858888 3 2017-09
我想知道为什么我会得到一个AttributeError以及如何解决这个问题。
答案 0 :(得分:3)
使用矢量化dt.strftime
,但首先通过参数parse_dates
将列转换为read_csv
中的日期时间:
df = pd.read_csv("C:/Users/***/****/salesdata.csv", parse_dates=['OrderDate'])
df['OrderPeriod'] = df.OrderDate.dt.strftime('%Y-%m')
print (df)
OrderDate ConsumerId Orders OrderPeriod
0 2017-09-01 5555555 4 2017-09
1 2017-09-01 66666666666 2 2017-09
2 2017-09-01 88888888888 4 2017-09
3 2017-09-01 9999999999 3 2017-09
4 2017-09-01 45858888 3 2017-09