[英]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.