python - 如何在 DatetimeIndex 中禁止除时间戳以外的键?
问题描述
Pandas 不将 DatetimeIndex 键限制为仅时间戳。为什么会这样,有没有办法做出这样的限制?
df = pd.DataFrame({"A":{"2019-01-01":12.0,"2019-01-03":27.0,"2019-01-04":15.0},
"B":{"2019-01-01":25.0,"2019-01-03":27.0,"2019-01-04":27.0}}
)
df.index = pd.to_datetime(df.index)
df.loc['2010-05-05'] = 1 # string index
df.loc[150] = 1 # integer index
print(df)
我得到以下数据框:
A B
2019-01-01 00:00:00 12.0 25.0
2019-01-03 00:00:00 27.0 27.0
2019-01-04 00:00:00 15.0 27.0
2010-05-05 1.0 1.0
150 1.0 1.0
我当然做不到
df.index = pd.to_datetime(df.index)
再次因为最后两行。但是,如果无法添加最后 2 行并引发错误,我想。可能吗?
解决方案
您对您的index
. 它不是DateTimeIndex
:_
>>> df.index
Index([2019-01-01 00:00:00, 2019-01-03 00:00:00, 2019-01-04 00:00:00,
'2010-05-05', 150],
dtype='object')
Object
一旦添加了不同的类型值, 该索引就会成为dtype 索引。DateTimeIndex
的类型不能超过时间戳,索引的类型会改变。
如果您想从索引中删除所有不是日期时间的值,您可以使用pd.to_datetime
anderrors='coerce'
df.index = pd.to_datetime(df.index, errors='coerce')
A B
2019-01-01 12.0 25.0
2019-01-03 27.0 27.0
2019-01-04 15.0 27.0
2010-05-05 1.0 1.0
NaT 1.0 1.0
要仅访问具有有效Timestamp
as 索引的元素,您可以使用notnull
:
df[df.index.notnull()]
A B
2019-01-01 12.0 25.0
2019-01-03 27.0 27.0
2019-01-04 15.0 27.0
2010-05-05 1.0 1.0
推荐阅读
- salesforce - 带有 Case/If 语句的字段公式
- javascript - 将 Javascript 中的 JSON 对象数组从“Apple and Orange”更改为“Apple”“Orange”
- python - 什么是实现或执行 键为 0,1,2,.. 的字典与 python 中的列表之间的区别
- assembly - 此代码是否适用于 scanf(); 功能工作?(NASM 16 位)
- javascript - 基本的 Javascript、CSS、HTML
- gcc - 链接描述文件中的一个部分之后的“=0”是什么?
- visual-studio-code - 使用 VSCode 扩展的 AOUTH 调用 API
- c# - 在 Linux 应用服务的 docker 容器中运行 .Net Core 控制台应用
- javascript - 我如何获取表格的单元格ID
- azure-devops - Azure 发布管道的部署问题