猿问

从 Dataframe Cell 获取单个值适用于 .loc 但不适用于 .at

我有一个包含一些日期和价格的 Pandas 数据框。我的索引包含日期(由 df.set_index 归因)并列不同的资产。


它看起来像这样,但 [6069 行 x 306 列]


            OVER_price  DI1J95_price

1995-01-02       48.61        45.662

1995-01-03       50.12        45.542

2019-03-11        6.40           NaN

我有一个类,它的参数 calcDate 是索引日期,diCode 是列中的资产名称,diPanel 是我的数据帧。


如果我在我的班级 df.loc 中运行:


#Find Prices     

self.diPrice = diPanel.loc[self.calcDate, self.diCode]


我得到了预期的价格,没有问题。


如果我将代码更改为 df.at:


#Find Prices     

self.diPrice = diPanel.at[self.calcDate, self.diCode]


我收到 KeyError 异常。例如 2019-03-11 作为 calcDate 返回:


发生异常:KeyError 17966


关于发生了什么的任何线索?谢谢


基于Rich Andrews的回答:

似乎正在发生的事情是.at索引类型有困难。


实际上问题在于日期时间类型。Allmy 代码基于numpy.datetime64[D]类型。但是我的 DataFrame 的索引是pandas.Timestamp.


我能够再次检查运行:


# Print last Index value and Type

print(type(diPanel.index[6068]))

print(diPanel.index[6068])


返回:


2019-03-11 00:00:00

<class 'pandas._libs.tslibs.timestamps.Timestamp'>

对于我的搜索参数:


# Print last Index value and Type

print(type(self.calcDate))

print(self.calcDate)

返回:


<class 'numpy.datetime64'>

2019-03-11

由于某种原因.loc能够绕过类型不匹配,但.at不是。有没有人遇到过同样的问题并且知道为什么这两种方法的行为不同?谢谢


哆啦的时光机
浏览 147回答 1
1回答

慕标5832272

医生说pandas.DataFrame.at加薪一个KeyError当标签不存在的DataFrame。当存在类型不匹配时也是如此。似乎正在发生的事情是.at索引类型有困难。import pandas as pdfrom pandas.compat import StringIOcsvdata = StringIO("""date,OVER_price,DI1J95_price1995-01-02,48.61,45.6621995-01-03,50.12,45.5422019-03-11,6.40,""")# index is a stringdf = pd.read_csv(csvdata, sep=",", index_col="date")# string being usedprint(df.at['1995-01-03', 'OVER_price'])产生50.12.import pandas as pdfrom pandas.compat import StringIOcsvdata = StringIO("""date,OVER_price,DI1J95_price1995-01-02,48.61,45.6621995-01-03,50.12,45.5422019-03-11,6.40,""")# index is going to be a datetimedf = pd.read_csv(csvdata, sep=",", index_col="date", parse_dates=True, infer_datetime_format=True)# select with a datetimefrom datetime import datetime as dtprint(df.at[dt(year=1995, month=1, day=3), 'OVER_price'])生产 50.12
随时随地看视频慕课网APP

相关分类

Python
我要回答