我有一些我想要分析的订单数据。 目前感兴趣的是:在哪个月购买SKU的频率是多少?
这是一个小例子:
try:
monthly_sales = df_orders.groupby(["item_sku", pd.Grouper(key="date",freq="M")]).size()
monthly_sales = monthly_sales.unstack(0)
except:
print "\n Here seems to be one issue"
工作正常,但如果我使用我的真实订单数据(来自CSV),我会在几分钟后得到:
TypeError:仅对DatetimeIndex,TimedeltaIndex或PeriodIndex有效,但得到'Int64Index'的实例
问题来自这条线:
monthly_sales = df_orders.groupby([“item_sku”,pd.Grouper(key =“date”,freq =“M”)])。size()
是否可以跳过错误? 我试了一下除了块:
{{1}}
然后我得到了print(monthly_sales)
清空数据框架 栏目:[txn_id,date,item_sku,quantity]
指数:[]
因此,我的数据中的某些内容会清空或制动它的分组? 我怎样才能“清理”我的数据呢? 或者我甚至可以在这里和那里丢失销售数据,如果我可以“跳过”错误,这可能吗?
答案 0 :(得分:1)
阅读CSV时,请使用parse_dates
参数 -
df_order = pd.read_csv('file.csv', parse_dates=['date'])
自动将date
转换为日期时间。如果这不起作用,那么您需要将其作为字符串加载,然后将errors='coerce'
参数与pd.to_datetime
-
df_order['date'] = pd.to_datetime(df_order['date'], errors='coerce')
请注意,您可以将系列对象(以及其他内容)传递给pd.to_datetime`。
接下来,按照您的方式进行过滤和分组,它应该可以正常工作。
df_orders[df_orders["item_sku"].isin(df_skus["sku"])]\
.groupby(['item_sku', pd.Grouper(key='date', freq='M')]).size()
item_sku date
RT-17 2017-03-31 1
2017-04-30 1
答案 1 :(得分:0)
df_order = pd.read_csv('file.csv', parse_dates=['date'])
这对我有用,只需将 parse_dates=['date'] 添加到您的代码以及您尝试获取的任何日期格式列值作为输入,将其替换为“日期”。