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

我对日期时间列有一个奇怪的问题。假设 start_date 列中有一个日期:


>>> df2.info()


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

Int64Index: 641 entries, 9 to 1394

Data 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-01

Data columns (total 1 columns):

 #   Column  Non-Null Count  Dtype 

---  ------  --------------  ----- 

 0   number  641 non-null    object

dtypes: 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-01

Data columns (total 1 columns):

 #   Column  Non-Null Count  Dtype 

---  ------  --------------  ----- 

 0   number  393 non-null    object

dtypes: object(1)

memory usage: 6.1+ KB

正如您所看到的,有日期截至 的条目2020-09-01。但为什么有时只给出这些日期呢?我无法在索引 start_date 中检测到间隙或类似的内容。


子衿沉夜
浏览 107回答 1
1回答

拉莫斯之舞

当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 pddf = 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#...
打开App,查看更多内容
随时随地看视频慕课网APP