【问题标题】:Plotting time series information with missing date values绘制缺少日期值的时间序列信息
【发布时间】:2020-04-30 07:45:51
【问题描述】:

我有以下数据集:

dataset.head(7)
Transaction_date     Product   Product Code  Description    
2019-01-01           A         123           A123
2019-01-02           B         267           B267
2019-01-09           B         267           B267
2019-02-11           C         139           C139
2019-02-11           A         125           C125 
2019-02-12           C         139           C139
2019-02-12           A         123           A123

数据集存储交易信息,交易日期可用。换句话说,并非所有日子都有数据可用。 最终,我想创建一个时间序列图,向我显示每天的交易数量。

到目前为止,我已经做了一个简单的countplot:

ax = sns.countplot(x=dataset["Transaction_date"],data=dataset)

这个图显示了交易发生的日期。但我更希望看到在情节中没有发生交易的日期,最好显示为 0。

我尝试了以下方法,但检索到错误消息:

groupbydate = dataset.groupby("Transaction_date")
ax = sns.tsplot(x="Transaction_date",y="Product",data=groubydate.fillna(0))

但我得到了错误 cannot label index with a null key 由于限制,我只能使用seaborn 0.8.1

【问题讨论】:

    标签: python pandas indexing time-series seaborn


    【解决方案1】:

    我相信reindex 应该适合你:

    # First convert the index to datetime
    dataset.index = pd.DatetimeIndex(dataset.index)
    
    # Then reindex! You can also select the min and max of the index for the limits
    dataset= dataset.reindex(pd.date_range("2019-01-01", "2019-02-12"), fill_value="NaN")
    

    【讨论】:

    • 谢谢。我忘记提及数据集中可能存在索引重复项。我使用dataset[dataset.index.duplicated()] 找到了它们。这意味着,对于一个交易日期,可以检索各种产品。所以,如果我申请:dataset=dataset.reindex(pd.date_range("2019-01-01", "2019-02-12"), fill_value="NaN"),我会收到一个错误:cannot reindex from a duplicate axis
    【解决方案2】:

    您可以使用pandas.DataFrame.dropna 删除包含 NaN 值的行,然后绘制图表。例如:

    dataset.dropna(thresh=2)

    将删除至少有两个 NaN 值的所有行。

    您可能还想使用 pandas.DataFrame.fillna 填充 NaN 值

    【讨论】:

    • 嗨,我实际上想保留 NaN 值,以便在没有交易时看到日期。
    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2015-08-08
    • 2020-12-05
    • 1970-01-01
    • 2016-11-21
    • 2022-01-15
    • 2021-05-18
    相关资源
    最近更新 更多