[英]How can I store the index date (last row) from a panda dataframe in a variable?
[英]How do I stop my script from writing the last row of a Panda dataframe multiple times?
我的應用程序相對簡單,因為如果用戶空閑時間超過 0.5 秒,它會跟蹤用戶的空閑時間,將其打印到標准輸出(用於在 Pycharm 中進行調試),創建一個 Pandas 數據幀,然后一旦鼠標移動,它將上次空閑時間寫入 csv 文件。
關鍵是生成的 CSV 顯示了我確定為數據幀最后一行的重復項。 所以基本上,我確定的是,如果我繼續移動鼠標,它只會繼續寫最后一行。
我怎樣才能讓腳本只寫最后一行一次,一旦我從空閑狀態變為活動狀態,然后一旦我回到空閑狀態就恢復循環,然后重復該過程? 我試圖刪除最后一行df.head(-1)
但這沒有做任何事情。 僅供參考,我是一個Python的n00b,所以任何幫助,將不勝感激,對我一個學習的機會。
class LASTINPUTINFO(Structure):
_fields_ = [
('cbSize', c_uint),
('dwTime', c_uint),
]
def main():
while True:
time.sleep(1)
if track_idle_time() >= .5:
print(track_idle_time())
df = pd.DataFrame({track_idle_time()})
print(df.values)
if track_idle_time() < .5:
df.head(-1)
df.to_csv(r'C:\users\bob\Desktop\activity.csv', mode='a', header=False, index=False)
else:
track_idle_time()
def track_idle_time():
lastInputInfo = LASTINPUTINFO()
lastInputInfo.cbSize = sizeof(lastInputInfo)
windll.user32.GetLastInputInfo(byref(lastInputInfo))
millis = windll.kernel32.GetTickCount() - lastInputInfo.dwTime
return millis / 1000.0
因此,我注意到的一件事是您多次調用track_idle_time()
- 如果上次輸入時間在這些調用之間沒有改變,則沒有必要,如果發生了變化,您將面臨不正確行為的風險。 這不是導致您出現問題的原因,但最好將其清理干凈。
真正導致您出現問題的原因是,只要空閑時間超過 >.5,就設置DF,但只要空閑時間 <.5,就將其寫入。 只要空閑時間保持在 <.5 以下,您就會繼續寫入上次 >.5 的內容。 寫完后清除即可。
(順便說一句,我不確定您為什么在這里使用 DataFrame,盡管您似乎只是在寫一個數字,但我想您以后可能想添加更多列。)
df = None # initialize
while True:
idle_time = track_idle_time()
if idle_time >= .5:
#print(idle_time)
df = pd.DataFrame({idle_time})
#print(df.values)
elif df != None:
df.to_csv(r'C:\users\bob\Desktop\activity.csv', mode='a', header=False, index=False)
df = None # clear after writing
time.sleep(1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.