Sto tentando di simulare l'utilizzo dei panda per accedere a un file in costante cambiamento.Streaming dei dati per i panda df
Ho un file che legge un file csv, aggiungendo una riga e poi dormendo per un tempo casuale per simulare l'input di massa.
import pandas as pd
from time import sleep
import random
df2 = pd.DataFrame(data = [['test','trial']], index=None)
while True:
df = pd.read_csv('data.csv', header=None)
df.append(df2)
df.to_csv('data.csv', index=False)
sleep(random.uniform(0.025,0.3))
Il secondo file è il controllo per la modifica dei dati emettendo la forma del dataframe:
import pandas as pd
while True:
df = pd.read_csv('data.csv', header=None, names=['Name','DATE'])
print(df.shape)
Il problema è che, mentre sto ottenendo la giusta forma del DF, ci sono alcune volte in cui è in uscita (0x2)
.
cioè .:
...
(10x2)
(10x2)
...
(10x2)
(0x2)
(11x2)
(11x2)
...
Questo si verifica ad un certo ma non tra ogni cambiamento di forma (il file aggiungendo dataframe).
Sapendo che ciò accade quando il primo script apre il file per aggiungere dati, e il secondo script non è in grado di accedervi, quindi (0x2), si verificherà una perdita di dati?
Non riesco ad accedere direttamente allo stream, solo al file di output. O ci sono altre possibili soluzioni?
Modifica
Lo scopo di questo è quello di caricare i nuovi dati solo (Ho un codice che lo fa) e fare analisi "on the fly". Alcune delle analisi includeranno output/sec, grafici (simili alla trama del flusso) e pochi altri calcoli numerici.
Il problema più grande è che ho accesso solo al file csv, e devo essere in grado di analizzare i dati così come arrivano senza perdita o ritardo.
Qual è l'obiettivo in sostanza? Qualcosa come il cane da guardia per verificare le modifiche al file potrebbe essere un approccio migliore? –
Si potrebbe anche implementare un blocco in modo che solo un processo possa aprire il file alla volta, unix ha vari modi per farlo http://stackoverflow.com/questions/29520587/checking-running-python-script-within-the- python-script/29522672 # 29522672. avere una lettura del processo e l'altra scrittura probabilmente non ti perderebbe alcun dato, ma se stai usando i dati per verificare le modifiche otterrai un'uscita errata. –
watchdog sembra uno strumento interessante da usare, ma non quello che sto cercando. Ho modificato la mia domanda per spiegare di più. – Leb