Ho bisogno di elaborare una quantità enorme di file CSV in cui il timestamp è sempre una stringa che rappresenta il timestamp di unix in millisecondi. Non sono riuscito a trovare un metodo per modificare queste colonne in modo efficiente.Panda che converte una riga con timestamp unix (in millisecondi) a datetime
Questo è quello che è venuto fuori, tuttavia questo naturalmente duplica solo la colonna e devo in qualche modo rimetterlo sul set di dati originale. Sono sicuro che si può fare quando si crea il DataFrame
?
import sys
if sys.version_info[0] < 3:
from StringIO import StringIO
else:
from io import StringIO
import pandas as pd
data = 'RUN,UNIXTIME,VALUE\n1,1447160702320,10\n2,1447160702364,20\n3,1447160722364,42'
df = pd.read_csv(StringIO(data))
convert = lambda x: datetime.datetime.fromtimestamp(x/1e3)
converted_df = df['UNIXTIME'].apply(convert)
Questa sceglierà la colonna 'unixtime' e modificarlo da
0 1447160702320
1 1447160702364
2 1447160722364
Name: UNIXTIME, dtype: int64
in questo
0 2015-11-10 14:05:02.320
1 2015-11-10 14:05:02.364
2 2015-11-10 14:05:22.364
Name: UNIXTIME, dtype: datetime64[ns]
Tuttavia, vorrei usare qualcosa come pd.apply()
per ottenere l'intera serie di dati restituito con la colonna convertita o, come ho già scritto, crea semplicemente dati datati durante la generazione di DataFrame da CSV.
Ah, ho completamente perso che 'parametro unit', grazie, questa è una bella! Farò una richiesta pull per includerla anche in '.read_csv' tramite parse_dates. – tamasgal
Ciò potrebbe comportare il momento sbagliato a causa del problema del fuso orario. –
@PengjuZhao la domanda dell'OP non fa menzione del fuso orario, perché la risposta di Teudimundo risolve il fatto che – EdChum