Pandas配对日期时间。日期时间Pandas日期类型值

2024-09-29 01:20:48 发布

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

我试图从一个表中获取与第二个表中的id和日期相匹配的日前价格(对于性能报告工具)。在

我用的是一个非常简单的子集 其中dateLoop[0]datetime.datetime(2013,1,10,0,0)

olddate = np.datetime64(dateLoop[0])

pv = dfp[dfp['instrument'].isin(dayfp.instrument.unique()) \
 & dfp.date == olddate ]

它引发了一个例外

TypeError: cannot astype a datetimelike from [datetime64[ns]] to [bool]

我怎样才能让它匹配pandas中没有创建的日期范围,以及它作为字典导入的位置,以便日期时间没有被索引?在

^{pr2}$

以及

dayfp =
`date   id instrument portfolio  position  price            sector  \
22 2013-01-11  153         PM  usequity     62000  82.82  Consumer Staples   
23 2013-01-11  154        CMS  usequity    217000  23.14         Utilities   
24 2013-01-11  155        EXC  usequity    181000  27.16         Utilities   
25 2013-01-11  156        AES  usequity    467000  10.81         Utilities   
26 2013-01-11  157        DOV  usequity     92000  53.95       Industrials   

         mv        wt  px0  
22  5134840  0.063798  NaN  
23  5021380  0.062389  NaN  
24  4915960  0.061079  NaN  
25  5048270  0.062723  NaN  
26  4963400  0.061668  NaN  

我试图通过从一个大的历史价格列表中搜索仪器和日期来填充px0。在

谢谢


Tags: iddatetimedate价格nan性能utilitiesinstrument
2条回答

如果我理解正确,您只需要将两列中的任何一列转换为另一列的数据类型,以便进行比较。如果是这样的话,在其中一个列上使用这些类型转换来将其转换为匹配的类型,我想可以解决您的问题。在

>>> dt
datetime.datetime(2013, 1, 10, 0, 0)
>>> str(dt)
'2013-01-10 00:00:00'
>>> np.datetime64(str(dt))
numpy.datetime64('2013-01-10T00:00:00-0600')
>>> pd.to_datetime(str(dt))
Timestamp('2013-01-10 00:00:00', tz=None)
>>> np.datetime64(str(dt)).tolist()
datetime.datetime(2013, 1, 10, 6, 0)

这能给你需要的转换吗?我不能确定你到底想做什么,但这些转换应该是有效的日期时间。日期时间到数字时间64以及pd.时间戳. 在

如果您可以添加更精确的示例数据和示例输出,我可以定制它以使其更有用。。。。在

Python解释

[dfp['instrument'].isin(['GE', 'INTC']) & dfp.date == olddate]

作为

^{pr2}$

而不是

(dfp['instrument'].isin(['GE', 'INTC'])) & (dfp.date == olddate)

根据operator precedence rules&的优先级高于==,因此{}旁边的两个项在应用==之前绑定在一起。在

如果不想深入考虑运算符优先级问题,请始终将布尔表达式括在括号中,以强制执行所需的操作顺序。在


import datetime as DT
import numpy as np
import pandas as pd
dfp = pd.DataFrame([
      dict(instrument = 'GE', price = 10, date = DT.datetime(2013,1,10,0,0)),
      dict(instrument = 'INTC', price = 15, date = DT.datetime(2013,1,10,0,0))])

olddate = np.datetime64(DT.datetime(2013,1,10,0,0))

pv = dfp[(dfp['instrument'].isin(['GE', 'INTC'])) & (dfp.date == olddate)]
print(pv)

收益率

        date instrument  price
0 2013-01-10         GE     10
1 2013-01-10       INTC     15

相关问题 更多 >