我有一个带日期和整数(标题:日期,数字)的csv,用制表符分隔。
我正在尝试使用CalMap(该页面上的演示)创建日历热图。创建图表的函数采用DateTime索引的数据。
df = pd.read_csv("data.csv",delimiter="\t")
df['Date'] = df['Date'].astype('datetime64[ns]')
events = pd.Series(df['Date'],index = df['Number'])
calmap.yearplot(events)
但是当我检查events.head(5)
时,会给出日期,后跟NaN。我检查了df['Number'].head(5)
,它们显示为int64。
导致此转换的我在做什么错?
编辑:下面的数据
Date Number
7/9/2018 40
7/10/2018 40
7/11/2018 40
7/12/2018 70
7/13/2018 30
首先,它不是NaN
,它不是NaT
(不是时间戳记),这对Pandas来说是唯一的,尽管Pandas使它与NaN兼容,并且在浮点列中将其与NaN相似地用于标记丢失的数据。
NaT
的作用显然取决于pd.Series(data, index=index)
的类型。如果data
是列表,则data
必须具有相等的长度,并且将以index
为数据且Series
为索引的方式构造新的data
。但是,如果index
已经是data
(例如Series
),它将取而代之与df['Date']
对应的行,并从这些行中构造一个新的index
。例如:
Series
会给你
pd.Series(df['Date'], [1, 1, 4])
1 2018-07-10
1 2018-07-10
4 2018-07-13
来自第1行,2018-07-10
来自2018-07-11
的第4行。但是,样本输入数据中没有索引为df['Date']
,40
或70
的行,因此假定缺少数据,而是插入了30
。
相反,这是使用列表时得到的:
NaT