我不明白为什么这段代码会引发错误。 '>'不是向量化的吗?我可以看到ng-click="toggleDestinationDropDown(true)"
比较没有问题。希望能提供见解并提出建议。
x_month_begin[0,0] > st_d
答案 0 :(得分:1)
如果检查对象的类型,问题将变得很清楚。
x_month_begin
:是一个3维的numpy数组(x_month_begin.shape
)st_d
:是熊猫时间戳记变量两者不能直接比较。为了进行比较,您可以执行以下操作:
[y > st_d for x in x_month_begin for y in x ]
答案 1 :(得分:1)
因此,您从熊猫结构开始:
janitor::tabyl(data$type)
# data$type n percent
# Action 5 0.2941176
# Comedy 3 0.1764706
# Drama 5 0.2941176
# Romance 2 0.1176471
# Thriller 2 0.1176471
与numpy数组相同:
In [133]: x_month_begin
Out[133]:
DatetimeIndex(['2020-01-01', '2020-02-01', '2020-03-01', '2020-04-01',
'2020-05-01', '2020-06-01', '2020-07-01', '2020-08-01',
'2020-09-01', '2020-10-01', '2020-11-01', '2020-12-01'],
dtype='datetime64[ns]', freq='MS')
您将其操纵为一个(n,3)数组(我怀疑这可以通过重塑和可能的转置来更直接地完成):
In [134]: x_month_begin.values
Out[134]:
array(['2020-01-01T00:00:00.000000000', '2020-02-01T00:00:00.000000000',
'2020-03-01T00:00:00.000000000', '2020-04-01T00:00:00.000000000',
'2020-05-01T00:00:00.000000000', '2020-06-01T00:00:00.000000000',
'2020-07-01T00:00:00.000000000', '2020-08-01T00:00:00.000000000',
'2020-09-01T00:00:00.000000000', '2020-10-01T00:00:00.000000000',
'2020-11-01T00:00:00.000000000', '2020-12-01T00:00:00.000000000'],
dtype='datetime64[ns]')
无论如何,现在进行比较:
In [135]: x_month_begin = np.vstack(np.split(x_month_begin, 3))
In [138]: x_month_begin = np.transpose(x_month_begin)
In [139]: x_month_begin
Out[139]:
array([['2020-01-01T00:00:00.000000000', '2020-05-01T00:00:00.000000000',
'2020-09-01T00:00:00.000000000'],
['2020-02-01T00:00:00.000000000', '2020-06-01T00:00:00.000000000',
'2020-10-01T00:00:00.000000000'],
['2020-03-01T00:00:00.000000000', '2020-07-01T00:00:00.000000000',
'2020-11-01T00:00:00.000000000'],
['2020-04-01T00:00:00.000000000', '2020-08-01T00:00:00.000000000',
'2020-12-01T00:00:00.000000000']], dtype='datetime64[ns]')
In [140]: _.shape
Out[140]: (4, 3)
In [141]: st_d = pd.to_datetime('01/2016', format="%m/%Y")
In [142]: st_d
Out[142]: Timestamp('2016-01-01 00:00:00')
In [143]: x_month_begin >st_d
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-143-30567662e59d> in <module>
----> 1 x_month_begin >st_d
pandas/_libs/tslibs/c_timestamp.pyx in pandas._libs.tslibs.c_timestamp._Timestamp.__richcmp__()
TypeError: '<' not supported between instances of 'Timestamp' and 'int'
数组可以进行numpy
比较,但是它们具有关于<
兼容的某些规则。 (例如,比较字符串和数字不起作用)。此外,dtypes
会使用日期和时间玩自己的游戏,某些格式是内部格式,有些与numpy pandas
兼容。
例如,如果我们将您的时间戳转换为numpy等效项:
datatime64
比较有效:
In [144]: st_d.to_numpy()
Out[144]: numpy.datetime64('2016-01-01T00:00:00.000000000')
In [145]: x_month_begin>st_d.to_numpy()
Out[145]:
array([[ True, True, True],
[ True, True, True],
[ True, True, True],
[ True, True, True]])
建立在pandas
上,或者至少使用numpy
数组存储其数据。但是numpy
代码都不知道numpy
。如果给定一个非numpy对象,它将天真的尝试将其转换,例如
pandas
与In [146]: np.asarray(st_d)
Out[146]: array(Timestamp('2016-01-01 00:00:00'), dtype=object)
不同。 [146]是产生您的错误的转换。
Out[144]
The original `DatetimeIndex` can be tested against the timestamp. That's a 'pure' pandas operation.
In [152]: _133>st_d
Out[152]:
array([ True, True, True, True, True, True, True, True, True,
True, True, True])
直接给出_133.to_numpy().reshape(-1,4).T
数组。