繁体   English   中英

使用日期时间列切片数据框(Python - Pandas)

[英]Slicing data frame with datetime columns (Python - Pandas)

通过 loc 和 iloc 方法,Pandas 允许我们对数据帧进行切片。 尽管如此,当列是日期时间对象时,我仍然无法做到这一点。

例如,假设由以下代码生成的数据帧:

d = {'col1': [1], 'col2': [2],'col3': [3]}
df = pd.DataFrame(data=d)
dates = ['01-01-2001','02-02-2002','03-03-2003']
dates = pd.to_datetime(dates).date
df.columns= dates

在此处输入图像描述

让我们尝试通过 dfloc 对 dataframe 的前两列进行切片:

df.loc[0,'01-01-2001':'02-02-2002']

我们得到以下 TypeError:'<' not supported between 'datetime.date' 和 'str' 实例

这怎么可能解决?

您可以从之前创建的列表中调用日期,并且不会出错。

d = {'col1': [1], 'col2': [2],'col3': [3]}
df = pd.DataFrame(data=d)
dates = ['01-01-2001','02-02-2002','03-03-2003']
dates = pd.to_datetime(dates).date
df.columns= dates

df.loc[0,dates[0]:dates[1]]

这里有两种不同的格式。 坚持一种格式很重要。 从列表中调用有效,因为它保证格式是相同的。 但正如您所说,您需要能够使用任何日期,以便第二个更适合您。

>>>dates = pd.to_datetime(dates).date
>>>print("With .date")
With .date
>>>print(dates)
[datetime.date(2001, 1, 1) datetime.date(2002, 2, 2)
 datetime.date(2003, 3, 3)]

>>>dates = pd.to_datetime(dates)
>>>print("Without .date")
Without .date
>>>print(dates)
DatetimeIndex(['2001-01-01', '2002-02-02', '2003-03-03'], dtype='datetime64[ns]', freq=None)


    df.iloc[0,[0,1]]


使用 iloc 或 loc,但在第二个参数中给出列名作为该列的索引,并且您正在传递字符串,只需给出索引

从该行上方捎带@Ch3steR 评论应该可以工作。

dates = pd.to_datetime(dates)

那时,日期转换应该允许您根据下面列出的日期为该范围内的列建立索引。 只需确保结束日期稍微超出您尝试捕获的结束日期即可。

# Return all rows in columns between date range 1/1/2001 and 2/3/2002
df.loc[:, '1/1/2001':'2/3/2002']

   2001-01-01  2002-02-02
0           1           2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM