Ich habe ein Problem mit Python + Numpy + Pandas.datetime64 Fehler beim Hinzufügen zu Pandas DataFrame
Ich habe eine Liste von Zeitstempeln, mit Millisekunde Genauigkeit, als Strings codiert. Dann runde ich sie auf 10ms Auflösung, das geht gut. Der Fehler tritt auf, wenn ich die gerundeten Zeitstempel zu DataFrame als neue Spalte hinzufüge - die Werte von datetime64-Objekten werden vollständig zerstört.
Mache ich etwas falsch? Oder ist das ein Pandas/NumPy Fehler?
BTW, ich habe den Verdacht, dass dieser Fehler nur unter Windows auftritt - ich habe es nicht bemerkt, als ich gestern den gleichen Code auf dem Mac ausprobiert habe (habe das nicht verifiziert).
import numpy
import pandas as pd
# We create a list of strings.
time_str_arr = ['2017-06-30T13:51:15.854', '2017-06-30T13:51:16.250',
'2017-06-30T13:51:16.452', '2017-06-30T13:51:16.659']
# Then we create a time array, rounded to 10ms (actually floored,
# not rounded), everything seems to be fine here.
rounded_time = numpy.array(time_str_arr, dtype="datetime64[10ms]")
rounded_time
# Then we create a Pandas DataFrame and assign the time array as a
# column to it. The datetime64 is destroyed.
d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
df = df.assign(wrong_time=rounded_time)
df
Die Ausgabe erhalte ich:
one two wrong_time
a 1.0 1.0 1974-10-01 18:11:07.585
b 2.0 2.0 1974-10-01 18:11:07.625
c 3.0 3.0 1974-10-01 18:11:07.645
d NaN 4.0 1974-10-01 18:11:07.665
Ausgabe von pd.show_versions():
INSTALLED VERSIONS
commit: None
python: 3.6.1.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 78 Stepping 3, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: None.None
pandas: 0.20.1
pytest: 3.0.7
pip: 9.0.1
setuptools: 27.2.0
Cython: 0.25.2
numpy: 1.12.1
scipy: 0.19.0
xarray: None
IPython: 5.3.0
sphinx: 1.5.6
patsy: 0.4.1
dateutil: 2.6.0
pytz: 2017.2
blosc: None
bottleneck: 1.2.1
tables: 3.2.2
numexpr: 2.6.2
feather: None
matplotlib: 2.0.2
openpyxl: 2.4.7
xlrd: 1.0.0
xlwt: 1.2.0
xlsxwriter: 0.9.6
lxml: 3.7.3
bs4: 4.6.0
html5lib: 0.999
sqlalchemy: 1.1.9
pymysql: None
psycopg2: None
jinja2: 2.9.6
s3fs: None
pandas_gbq: None
pandas_datareader: None
Sie können 'pd.to_datetime (time_str_arr) ' –
Ich versuchte die pd.to_datetime (time_str_arr). Es hat nichts geändert. Der Fehler konvertiert die Zeichenfolgen nicht in datetime. Dieser Schritt funktioniert gut. Der Fehler besteht darin, dass das datetime64-Array zerstört (oder nicht korrekt importiert) wird, wenn ich versuche, es dem Datumsrahmen hinzuzufügen. –