Pandas TypeError。只对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,但得到了一个'Int64Index&#39的实例。[英] Pandas TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index'

本文是小编为大家收集整理的关于Pandas TypeError。只对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,但得到了一个'Int64Index&#39的实例。的处理方法,想解了Pandas TypeError。只对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,但得到了一个'Int64Index&#39的实例。的问题怎么解决?Pandas TypeError。只对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,但得到了一个'Int64Index&#39的实例。问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一些要分析的订单数据.目前感兴趣的是:在哪个月购买了哪个 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、数量]
索引:[]

所以我的数据中的某些东西会清空或破坏看起来像的分组?如何"清理"我的数据?
或者如果我可以"跳过"错误,我什至可以在这里和那里丢失销售数据,这可能吗?

推荐答案

读取 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

本文地址:https://www.itbaoku.cn/post/1728094.html