Python 无法使用DatetimeIndex标签列表执行此操作
我有一个12x3的数据框,用于存储2017年的月平均温度、最高温度和最低温度:Python 无法使用DatetimeIndex标签列表执行此操作,python,pandas,datetime,slice,Python,Pandas,Datetime,Slice,我有一个12x3的数据框,用于存储2017年的月平均温度、最高温度和最低温度: import pandas as pd tavg = pd.Series([55.8, 57.2, 61.0, 63.6, 63.3, 66.7, 71.7, 72.0, 71.5, 71.5, 65.6, 61.4]) tmax = pd.Series([62.7, 62.6, 69.3, 71.9, 69.4, 72.6, 77.5, 77.3, 78.5, 80.4, 73.7, 72.4]) tmin =
import pandas as pd
tavg = pd.Series([55.8, 57.2, 61.0, 63.6, 63.3, 66.7, 71.7, 72.0, 71.5, 71.5, 65.6, 61.4])
tmax = pd.Series([62.7, 62.6, 69.3, 71.9, 69.4, 72.6, 77.5, 77.3, 78.5, 80.4, 73.7, 72.4])
tmin = pd.Series([48.8, 51.8, 52.8, 55.4, 57.1, 60.9, 65.8, 66.8, 64.6, 62.5, 57.3, 50.3])
temp_df = pd.DataFrame()
temp_df['TAVG'] = tavg
temp_df['TMIN'] = tmin
temp_df['TMAX'] = tmax
dates = pd.date_range(start='2017-01-01', end='2017-12-01', freq='MS')
temp_df.index = dates
我想按标签划分日期列表,例如2017-01-01和2017-05-01
将这些日期分别切片可以很好地工作:
temp_df.loc['2017-01-01']
TAVG 55.8
TMIN 48.8
TMAX 62.7
Name: 2017-01-01 00:00:00, dtype: float64
temp_df.loc['2017-05-01']
TAVG 63.3
TMIN 57.1
TMAX 69.4
Name: 2017-05-01 00:00:00, dtype: float64
但用这些日期的列表切片会产生一个关键错误:
temp_df.loc[['2017-01-01', '2017-05-01']]
"KeyError: "None of [['2017-01-01', '2017-05-01']] are in the [index]"
在使用DatetimeIndex时,使用索引标签列表进行切片是否有特殊技巧 切片失败,因为索引类型为
Timestamp
。代码temp_df.loc['2017-01-01','2017-05-01']
查找字符串标签。使用下面的代码将它们解析为时间戳
temp_df.loc[[pd.Timestamp('2017-01-01'), pd.Timestamp('2017-05-01')]]
输出:
TAVG TMIN TMAX
2017-01-01 55.8 48.8 62.7
2017-05-01 63.3 57.1 69.4
TAVG TMIN TMAX
2017-01-01 55.8 48.8 62.7
2017-05-01 63.3 57.1 69.4
要使代码正常工作,您需要将索引类型更改为str
temp_df.index = temp_df.index.astype(str)
temp_df.loc[['2017-01-01', '2017-05-01']]
输出:
TAVG TMIN TMAX
2017-01-01 55.8 48.8 62.7
2017-05-01 63.3 57.1 69.4
TAVG TMIN TMAX
2017-01-01 55.8 48.8 62.7
2017-05-01 63.3 57.1 69.4
谢谢,但我不想要日期范围,只想要2017-01-01和2017-05-01这两个日期。在我的例子中,为什么使用标签列表进行切片失败?