为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas - 日期时间列的奇怪问题

Pandas - 日期时间列的奇怪问题

PHP
子衿沉夜 2023-11-09 15:48:02
我对日期时间列有一个奇怪的问题。假设 start_date 列中有一个日期:>>> df2.info()<class 'pandas.core.frame.DataFrame'>Int64Index: 641 entries, 9 to 1394Data columns (total 2 columns): #   Column      Non-Null Count  Dtype         ---  ------      --------------  -----          0   number      641 non-null    object         1   start_date  641 non-null    datetime64[ns]dtypes: datetime64[ns](1), object(1)memory usage: 15.0+ KB当我将索引设置为start_date时,DatetimeIndex似乎不完整:>>> df2 = df2.set_index('start_date')>>> df2.info()<class 'pandas.core.frame.DataFrame'>DatetimeIndex: 641 entries, 2020-01-01 to 2020-03-01Data columns (total 1 columns): #   Column  Non-Null Count  Dtype ---  ------  --------------  -----  0   number  641 non-null    objectdtypes: object(1)memory usage: 10.0+ KB实际上这个数据框中还有更多条目:df3 = df2.copy()df3 = df3.reset_index()df3 = df3[pd.to_datetime(df3['start_date']).dt.month > 3]df3 = df3.set_index('start_date')df3.info()<class 'pandas.core.frame.DataFrame'>DatetimeIndex: 393 entries, 2020-04-01 to 2020-09-01Data columns (total 1 columns): #   Column  Non-Null Count  Dtype ---  ------  --------------  -----  0   number  393 non-null    objectdtypes: object(1)memory usage: 6.1+ KB正如您所看到的,有日期截至 的条目2020-09-01。但为什么有时只给出这些日期呢?我无法在索引 start_date 中检测到间隙或类似的内容。
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

DataFrame.info打印出XXX to YYY索引中的信息时,它只是打印出第一个索引值的值到最后一个索引值的值。如果您的索引不是单调的(可以使用 轻松检查df.index.is_monotonic),则这不对应于完整范围。

负责此操作的代码是Index._summary,很明显,它在总结时只是查看第一个值[0]和最后一个值[-1]

def _summary(self, name=None) -> str_t:

    """

    Return a summarized representation.

    Parameters

    ----------

    name : str

        name to use in the summary representation

    Returns

    -------

    String with a summarized representation of the index

    """

    if len(self) > 0:

        head = self[0]

        if hasattr(head, "format") and not isinstance(head, str):

            head = head.format()

        tail = self[-1]

        if hasattr(tail, "format") and not isinstance(tail, str):

            tail = tail.format()

        index_summary = f", {head} to {tail}"

    else:

        index_summary = ""

这是一个简单的例子:


import pandas as pd


df = pd.DataFrame(data=[1,1,1], index=pd.to_datetime(['2010-01-01', '2012-01-01', '2011-01-01']))


df.info()


#<class 'pandas.core.frame.DataFrame'>

#DatetimeIndex: 3 entries, 2010-01-01 to 2011-01-01

#...

sort如果您想在查看信息之前了解完整的索引:


df.sort_index().info()

#<class 'pandas.core.frame.DataFrame'>

#DatetimeIndex: 3 entries, 2010-01-01 to 2012-01-01

#...


查看完整回答
反对 回复 2023-11-09
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信