【发布时间】:2018-01-16 00:27:14
【问题描述】:
我有一些要分析的订单数据。 目前感兴趣的是:在哪个月购买了哪个 SKU 的频率?
这里是一个小例子:
import datetime
import pandas as pd
import numpy as np
d = {'sku': ['RT-17']}
df_skus = pd.DataFrame(data=d)
print(df_skus)
d = {'date': ['2017/02/17', '2017/03/17', '2017/04/17', '2017/04/18', '2017/05/02'], 'item_sku': ['HT25', 'RT-17', 'HH30', 'RT-17', 'RT-19']}
df_orders = pd.DataFrame(data=d)
print(df_orders)
for i in df_orders.index:
print("\n toll")
df_orders.loc[i,'date']=pd.to_datetime(df_orders.loc[i, 'date'])
df_orders = df_orders[df_orders["item_sku"].isin(df_skus["sku"])]
monthly_sales = df_orders.groupby(["item_sku", pd.Grouper(key="date",freq="M")]).size()
monthly_sales = monthly_sales.unstack(0)
print(monthly_sales)
这很好,但如果我使用我的真实订单数据(来自 CSV),我会在几分钟后得到:
TypeError: 仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但获得了 'Int64Index' 的实例
那个问题出在下面一行:
monthly_sales = df_orders.groupby(["item_sku", pd.Grouper(key="date",freq="M")]).size()
是否可以跳过错误? 我试过了,除了块:
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"
然后我得到打印(monthly_sales)
空数据框
列:[txn_id、日期、item_sku、数量]
索引:[]
所以我的数据中的某些内容会清空或破坏看起来像的分组?
如何“清理”我的数据?
或者,如果我可以“跳过”错误,我什至可以在这里和那里丢失销售数据,这可能吗?
【问题讨论】:
-
能否请您指出是哪段代码引发了此错误?您对此样本数据有何期望?
-
是的,抱歉 - 我添加了有问题的代码行,并且我已经尝试过 - 除了麻烦的行。
-
您需要清理数据。显然,有时您的 df_orders.index 是 DatetimeIndex,有时是 Int64Index。您应该添加一个检查,如
if df_orders.index.dtype != pd.DatetimeIndex....
标签: python pandas validation