我正在尝试构建简单的 DataFrame。两者都有日期,而第一个有一个额外的列:
import pandas as pd
import datetime as dt
import numpy as np
a = pd.DataFrame(np.array([
[dt.datetime(2018, 1, 10), 5.0]]), columns=['date', 'amount'])
print(a)
# date_dt amount
# 2018-01-10 00:00:00 5
b = pd.DataFrame(np.array([
[dt.datetime(2018, 1, 10)]]), columns=['date'])
print(b)
# date_dt
# 2018-01-10
为什么日期的解释不同(有时间和没有时间)?当我稍后尝试应用合并时,它给我带来了问题。
最佳答案
好的,这就是发生的事情。我将使用以下代码:
import pandas as pd
import datetime as dt
import numpy as np
a_val = np.array([[dt.datetime(2018, 1, 10), 5.0]])
a = pd.DataFrame(a_val, columns=['date', 'amount'])
b_val = np.array([[dt.datetime(2018, 1, 10)]])
b = pd.DataFrame(b_val, columns=['date'])
我只是拆分 pd 数据帧的内容并调用数据帧本身。首先让我们打印 a_val
和 b_val
变量:
print(a_val, b_val)
# output: [[datetime.datetime(2018, 1, 10, 0, 0) 5.0]] [[datetime.datetime(2018, 1, 10, 0, 0)]]
还是不错的,对象是 datetime.datetime。
现在让我们使用 .values
访问数据框的值:
print(a.values, b.values)
# output: [[datetime.datetime(2018, 1, 10, 0, 0) 5.0]] [['2018-01-10T00:00:00.000000000']]
这里的事情搞砸了。让我们打印日期的类型:
print(type(a.values[0][0]), type(b.values[0][0]))
# output: <class 'datetime.datetime'> <class 'numpy.datetime64'>
好的,就是这样:因为在第二个数据帧中你只有一个日期对象,并且你调用了 np.array()
,所以日期被转换为 numpy.datetime64
对象,它具有不同的格式。相反,在第一个数据框中,您有一个 datetime 对象和一个 int,代码将它们保持原样。
简短版本:如果你有不同对象的集合,如日期、字符串、整数等,请使用列表,而不是 numpy 数组
关于python - 加载到 pd.DataFrame 时日期时间的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57145851/