Potrzebuję przetworzyć ogromną ilość plików CSV, w których znacznik czasu jest zawsze ciągiem reprezentującym znacznik czasu unix w milisekundach. Nie udało mi się znaleźć jeszcze skutecznej metody modyfikacji kolumn.Pandy konwertujące wiersz z uniksowym znacznikiem czasu (w milisekundach) na datetime
Oto, co wymyśliłem, ale to oczywiście powiela tylko kolumnę i muszę jakoś umieścić ją z powrotem w oryginalnym zbiorze danych. Jestem pewien, że można to zrobić podczas tworzenia 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)
Pozwoli to wybrać kolumnę 'unixtime' i zmienić go z
0 1447160702320
1 1447160702364
2 1447160722364
Name: UNIXTIME, dtype: int64
w tym
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]
Jednakże chciałbym użyć czegoś jak pd.apply()
aby cały zestaw danych zwrócony z konwersją kolumna lub jak już napisałem, po prostu tworzenie datetimes podczas generowania DataFrame z pliku CSV.
Ach, całkowicie brakowało że 'unit' parametr, dzięki, że to miły jeden! Zrobię żądanie ściągnięcia, aby uwzględnić to również w '.read_csv' za pośrednictwem parse_dates. – tamasgal
Może to prowadzić do niewłaściwego czasu z powodu problemów z strefą czasową. –
@PengjuZhao pytanie OP nie wspomina o strefie czasowej, ponieważ ta odpowiedź Teudimundo rozwiązuje to: – EdChum