日期时间和熊猫之间的Unix Epoche值不匹配

时间:2020-03-20 00:18:20

标签: python pandas datetime epoch

我将没有时区信息的datetime对象存储在pandas数据框中。 检索时间戳信息时,时间戳与从原始datetime对象获得的时间戳不同。

import pandas as pd
from datetime import datetime

dt = datetime.now()
print(dt)
print(dt.timestamp())

df = pd.DataFrame(data=[(dt)],columns=["date"])
print(df)

epoche_from_pandas = df.date.apply(lambda x: x.timestamp()).values[0]
print(epoche_from_pandas)

打印熊猫数据框显示相同的日期时间字符串,但纪元值不同。两个时间戳都偏移了3600秒,这相当于我当地的时区差异(+1小时)。

2020-03-20 01:05:05.457290

1584662705.45729

2020-03-20 01:05:05.457290

1584666305.45729

我的假设是,pandas使用其自己的内部表示形式,该内部表示形式忽略了纪元值(可能使用年,月,日,时...组成),并以unix时间(未本地化)打印。这意味着,虽然两个打印语句都使用相同的字符串,但大熊猫时间实际上比之前大1小时,因为它反映的是通常落后1小时的unix。

以上是否正确?

2 个答案:

答案 0 :(得分:1)

从技术上讲,这还不是解决问题的方法,但是我发现了一段更清晰的代码,似乎可以重现该问题:

$PATH:
C:\ProgramData\Anaconda3\envs\msudev
C:\ProgramData\Anaconda3\envs\msudev\Library\mingw-w64\bin
C:\ProgramData\Anaconda3\envs\msudev\Library\usr\bin
C:\ProgramData\Anaconda3\envs\msudev\Library\bin
C:\ProgramData\Anaconda3\envs\msudev\Scripts
C:\ProgramData\Anaconda3\envs\msudev\bin
C:\ProgramData\Anaconda3\condabin
C:\Program Files\Python38\Scripts
C:\Program Files\Python38
C:\Program Files (x86)\Embarcadero\Studio\20.0\bin
C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl
C:\Program Files (x86)\Embarcadero\Studio\20.0\bin64
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl
C:\Users\Public\Documents\Embarcadero\Studio\18.0\Bpl
C:\Users\Public\Documents\RAD Studio\10.0\Bpl
C:\Program Files (x86)\Intel\iCLS Client
C:\Program Files\Intel\iCLS Client
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
C:\Program Files (x86)\Intel\Intel® Management Engine Components\DAL
C:\Program Files\Intel\Intel® Management Engine Components\DAL
C:\Program Files (x86)\Intel\Intel® Management Engine Components\IPT
C:\Program Files\Intel\Intel® Management Engine Components\IPT
C:\Program Files\Intel\WiFi\bin
C:\Program Files\Common Files\Intel\WirelessCommon
C:\WINDOWS\system32
C:\WINDOWS
C:\WINDOWS\System32\Wbem
C:\WINDOWS\System32\WindowsPowerShell\v1.0
C:\Program Files (x86)\Windows Live\Shared
C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0
C:\Program Files\PuTTY
C:\Program Files\Git\cmd
C:\Program Files\nodejs
C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit
C:\Program Files\dotnet
C:\Program Files\Microsoft SQL Server\130\Tools\Binn
C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn
C:\ProgramData\chocolatey\bin
C:\Program Files\Java\apache-ant-1.10.7\bin
C:\Program Files\Java\jdk1.6.0_18\jre\bin
C:\Program Files\Java\jdk1.8.0_60\bin
C:\Program Files\Java\jdk1.8.0_60\jre\bin
C:\Users\1\AppData\Roaming\npm

sys.path:
C:\ProgramData\Anaconda3\envs\msudev\Scripts
C:\ProgramData\Anaconda3\envs\msudev\python38.zip
C:\ProgramData\Anaconda3\envs\msudev\DLLs
C:\ProgramData\Anaconda3\envs\msudev\lib
C:\ProgramData\Anaconda3\envs\msudev
C:\ProgramData\Anaconda3\envs\msudev\lib\site-packages
C:\ProgramData\Anaconda3\envs\msudev\lib\site-packages\win32
C:\ProgramData\Anaconda3\envs\msudev\lib\site-packages\win32\lib
C:\ProgramData\Anaconda3\envs\msudev\lib\site-packages\Pythonwin

sys.executable:
C:\ProgramData\Anaconda3\envs\msudev\python.exe

sys.version:
3.8.1 (default, Mar 2 2020, 13:06:26) [MSC v.1916 64 bit (AMD64)]

platform.platform():
Windows-10-10.0.18362-SP0

where jupyter:
C:\ProgramData\Anaconda3\envs\msudev\Scripts\jupyter.exe

pip list:
Package Version
------------------ -------------------
attrs 19.3.0
backcall 0.1.0
bleach 3.1.3
certifi 2019.11.28
colorama 0.4.3
decorator 4.4.2
defusedxml 0.6.0
entrypoints 0.3
importlib-metadata 1.5.0
ipykernel 5.1.4
ipython 7.13.0
ipython-genutils 0.2.0
jedi 0.16.0
Jinja2 2.11.1
jsonschema 3.2.0
jupyter-client 6.0.0
jupyter-core 4.6.3
MarkupSafe 1.1.1
mistune 0.8.4
nbconvert 5.6.1
nbformat 5.0.4
notebook 6.0.3
pandocfilters 1.4.2
parso 0.6.2
pickleshare 0.7.5
pip 20.0.2
prometheus-client 0.7.1
prompt-toolkit 3.0.4
Pygments 2.6.1
pyrsistent 0.15.7
python-dateutil 2.8.1
pywin32 227
pywinpty 0.5.7
pyzmq 19.0.0
Send2Trash 1.5.0
setuptools 46.0.0.post20200309
six 1.14.0
terminado 0.8.3
testpath 0.4.4
tornado 6.0.4
traitlets 4.3.3
wcwidth 0.1.8
webencodings 0.5.1
wheel 0.34.2
wincertstore 0.2
zipp 3.1.0

输出:

from datetime import datetime

import pandas as pd

dt = datetime.now()
print(f"dt: {dt}")
print(f"dt timestamp: {dt.timestamp()}\n")

pd_ts = pd.Timestamp(dt)
print(f"pd Ts: {pd_ts}")
print(f"pd Ts .timestamp(): {pd_ts.timestamp()}")

print(dt.timestamp() - pd_ts.timestamp())

答案 1 :(得分:0)

使用to_pydatetime()将数据转换为python datetime对象,然后timestamp()返回相同的值。

import pandas as pd
from datetime import datetime

dt = datetime.now()
print(dt)
print(dt.timestamp())

df = pd.DataFrame(data=[(dt)],columns=["date"])
print(df)

epoche_from_pandas = df.date.apply(lambda x: x.to_pydatetime().timestamp()).values[0]
print(epoche_from_pandas)

结果:

2020-03-19 21:20:56.633482
1584667256.633482
                        date
0 2020-03-19 21:20:56.633482
1584667256.633482