执行np时类型提升无效。其中字段为日期类型

2024-05-23 23:42:35 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个股票清单的价格和天数的数据集

数据按股票代码和日期排序

对于每一行,我希望能够得到下一个日期以及下一个日期的收盘价。在符号不同的情况下,我需要空值。只要日期是对象类型,它就适用于日期字段,但如果字段是日期时间类型,则会导致无效的类型升级

比如说

Symbol   Date          Price

A        2020-01-01  50

A        2020-01-02  51

B        2020-01-01  101

我希望第一条记录的NextClose字段为51,NextDate值为2020-12-02

对于第二条记录,我希望两个值都为null,因为符号发生了变化

df = pd.DataFrame({"Date": ["2020-01-01", "2020-01-02","2020-01-03"],
                   "Symbol": ["A","A","B"],
                   "Price": [50, 51, 101]})


/*this works */

df['NextClose']=np.where(df['Symbol'] ==df ['Symbol'].shift(-1),df ['Price'].shift(-1).round(4),np.nan)
df['NextDate']=np.where(df['Symbol'] ==df ['Symbol'].shift(-1),df ['Date'].shift(-1),np.nan)
 
/* this gives the invalid type promotion error */

df["NewDate"]=pd.to_datetime(df["Date"])
df['NextNewDate']=np.where(df['Symbol'] ==df ['Symbol'].shift(-1),df ['NewDate'].shift(-1),np.nan)

当字段是datetime类型时,我可以用空值填充NextClose字段吗

谢谢

注:

df['NextNewDate']=np.where(df['Symbol'] ==df ['Symbol'].shift(-1),df ['NewDate'].shift(-1),pd.NaT)

不抛出错误,但以历元时间(157792320000000000)返回结果

df['NextNewDate']=pd.to_datetime(df["NextNewDate"])

在返回正确的日期之后添加此项,但这似乎是一个额外的步骤


Tags: 数据类型dfdatetimedateshiftnpnan