我在 Pandas 和 python 中的時間格式有很大的問題。似乎在某種程度上存在一些我無法解決的不兼容問題......
我正在嘗試從與給定日期重疊的熊貓資料框中選擇行。
讓我們初始化一個隨機資料幀:
import random
import pandas as pd
import numpy as np
from datetime import timedelta
def random_dates(start, end, n, unit='D', seed=None):
if not seed: # from piR's answer
np.random.seed(0)
ndays = (end - start).days 1
return pd.to_timedelta(np.random.rand(n) * ndays, unit=unit) start
np.random.seed(0)
start = pd.to_datetime('2015-01-01')
end = pd.to_datetime('2018-01-01')
rd=random_dates(start, end, 1000)
end_date = (rd timedelta(days=4))
a_pd=pd.DataFrame({"idx":np.random.choice(50, 1000), "start":rd, "end":end_date})
現在我使用與“rd”相同的函式創建單個間隔日期。
start = pd.to_datetime('2016-01-01')
end = pd.to_datetime('2016-01-02')
rd_target=random_dates(start, end, 1)
要查看串列日期與目標日期“rd_target”的重疊,我只需將資料幀的“結束”與 rd_target 的“開始”進行比較,然后將資料幀的“開始”與“結束”進行比較rd_target。
a_pd[a_pd["end"] > rd_target[0] & a_pd["start"]<rd_target[1] ]
但是python不喜歡它。這里的錯誤資訊:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-63-dab78e1a862e> in <module>
----> 1 a_pd[a_pd["end"] > rd[0] & a_pd["start"]<rd[1] ]
~/venv/lib/python3.8/site-packages/pandas/core/ops/common.py in new_method(self, other)
63 other = item_from_zerodim(other)
64
---> 65 return method(self, other)
66
67 return new_method
~/venv/lib/python3.8/site-packages/pandas/core/ops/__init__.py in wrapper(self, other)
392 rvalues = extract_array(other, extract_numpy=True)
393
--> 394 res_values = logical_op(lvalues, rvalues, op)
395 return self._construct_result(res_values, name=res_name)
396
~/venv/lib/python3.8/site-packages/pandas/core/ops/array_ops.py in logical_op(left, right, op)
339 if should_extension_dispatch(lvalues, rvalues):
340 # Call the method on lvalues
--> 341 res_values = op(lvalues, rvalues)
342
343 else:
~/venv/lib/python3.8/site-packages/pandas/core/ops/roperator.py in rand_(left, right)
50
51 def rand_(left, right):
---> 52 return operator.and_(right, left)
53
54
TypeError: unsupported operand type(s) for &: 'Timestamp' and 'DatetimeArray'
請問有什么幫助嗎?
uj5u.com熱心網友回復:
如果您想在您的rd_target時間范圍內有 2 個元素,您需要將初始化它的行更改為:
rd_target=random_dates(start, end, 2)
撰寫它的方式rd_target只有一個元素,您將無法訪問索引 1。
此外,您需要資料框過濾器運算式上的括號,如下所示:
a_pd[(a_pd["end"] > rd_target[0]) & (a_pd["start"] < rd_target[1])]
有關運算子優先級的更多資訊,請訪問官方檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/334466.html
上一篇:getInitialProps在我的實時站點上導致ERR_TOO_MANY_REDIRECTS錯誤,但在我的本地版本上沒有
