我有一個關于在 Python 中的 pandas DataFrame 中選擇范圍的問題。我有一個時間列和一個值列。我想選擇時間在早上 6 點到下午 6 點之間的所有行(所以從 6:00:00 到 18:00:00)。我已經成功地選擇了所有的夜間時間(18:00:00 到 6:00:00 之間),但是如果我將同樣的時間應用于白天,它就不起作用了。我的語法有問題嗎?下面是一個最小的作業示例。在我的情況下,timeslice2 回傳一個空的 DataFrame。
import pandas as pd
times = ("1:00:00", "2:00:00", "3:00:00", "4:00:00", "5:00:00", "6:00:00", "7:00:00", "8:00:00", "9:00:00", \
"10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00", "16:00:00", "17:00:00", \
"18:00:00", "19:00:00", "20:00:00", "21:00:00", "22:00:00", "23:00:00")
values = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23)
data = zip(times, values)
colnames = ["Time", "values"]
df = pd.DataFrame(data=data, columns=colnames)
print(df)
# selecting only night times
timeslice1 = df[(df['Time'] > '18:00:00') & (df['Time'] <= '6:00:00')]
# selecting only day times
timeslice2 = df[(df['Time'] > '6:00:00') & (df['Time'] <= '18:00:00')]
print(timeslice1)
print(timeslice2)
我已經能夠用這個答案選擇正確的范圍,但對我來說,上面的方法不起作用似乎很奇怪。此外,如果我根據需要將“時間”列轉換為“日期時間”,它會使用今天的日期,我不希望這樣。
uj5u.com熱心網友回復:
這樣它就可以作業,如果將第一個范圍視為 datetime 則沒有結果,因為它將意味著按時間順序排列的兩個不同日期(天)。
import pandas as pd
times = ("1:00:00", "2:00:00", "3:00:00", "4:00:00", "5:00:00", "6:00:00", "7:00:00", "8:00:00", "9:00:00", \
"10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00", "16:00:00", "17:00:00", \
"18:00:00", "19:00:00", "20:00:00", "21:00:00", "22:00:00", "23:00:00")
values = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23)
data = zip(times, values)
colnames = ["Time", "values"]
df = pd.DataFrame(data=data, columns=colnames)
print('Original df \n',df)
# selecting only night times
timeslice1 = df[(df['Time'] > '18:00:00') & (df['Time'] <= '6:00:00')]
# selecting only day times
#conver Time column to datetime
df['Time'] = pd.to_datetime(df['Time'])
timeslice2 = df[(df['Time'] > '6:00:00') & (df['Time'] <= '18:00:00')]
#convert df back to string
timeslice2["Time"] = timeslice2["Time"].dt.strftime('%H:%M:%S')
print('Slice 1 \n', timeslice1)
print('Slice 2 \n', timeslice2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453437.html
