Pandas:如何从DatetimeIndex类型的DataFrame中提取值?
解决DatetimeIndex行列的DataFrame值提取问题
你的DataFrame行和列均为DatetimeIndex,其元素是Timestamp对象,直接用字符串索引会因类型不匹配报错,以下是正确的提取方法:
方法1:将字符串转为Timestamp匹配索引
把要索引的字符串转为Timestamp类型,与索引完全匹配:
import pandas as pd # 提取单个值:行2018年1月末,列2018年2月末 data.loc[pd.to_datetime('2018-01'), pd.to_datetime('2018-02')] # 提取多行多列:行2018年1-2月末,列2018年1-3月末 data.loc[ [pd.to_datetime('2018-01'), pd.to_datetime('2018-02')], [pd.to_datetime('2018-01'), pd.to_datetime('2018-03')] ]
方法2:利用DatetimeIndex的部分字符串匹配
DatetimeIndex支持年份、月份等部分字符串索引,Pandas会自动匹配对应时间点:
# 提取2018年1月行、2018年2月列 data.loc['2018-01', '2018-02'] # 提取2018年1-2月的所有行,2018年1-3月的所有列(切片形式) data.loc['2018-01':'2018-02', '2018-01':'2018-03']
方法3:直接使用Timestamp对象索引
若明确知道索引的具体时间戳(比如你的行索引是2018-01-31、2018-02-28),可直接用Timestamp对象:
from pandas import Timestamp data.loc[Timestamp('2018-01-31'), Timestamp('2018-02-28')]
错误原因说明
之前的报错多因索引类型不匹配:
- 直接传入字符串/字符串列表时,与
DatetimeIndex的Timestamp元素类型不兼容 - 使用
data.loc['2018-01', ['2018-02']]时,列参数是字符串列表,需转为Timestamp列表即可修复:data.loc['2018-01', [pd.to_datetime('2018-02')]]
内容的提问来源于stack exchange,提问作者Nick Vence
相关产品推荐
相关产品推荐

