我对Datetime列有一个奇怪的问题。 假设在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中的间隔或类似内容。
答案 0 :(得分: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 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
#...