簡體   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