为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哆啦的时光机 2022-01-05 11:01:16
我有一个包含一些日期和价格的 Pandas 数据框。我的索引包含日期(由 df.set_index 归因)并列不同的资产。它看起来像这样,但 [6069 行 x 306 列]            OVER_price  DI1J95_price1995-01-02       48.61        45.6621995-01-03       50.12        45.5422019-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 Typeprint(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 Typeprint(type(self.calcDate))print(self.calcDate)返回:<class 'numpy.datetime64'>2019-03-11由于某种原因.loc能够绕过类型不匹配,但.at不是。有没有人遇到过同样的问题并且知道为什么这两种方法的行为不同?谢谢
查看完整描述

1 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

医生说pandas.DataFrame.at加薪一个KeyError当标签不存在的DataFrame。


当存在类型不匹配时也是如此。


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


import pandas as pd

from pandas.compat import StringIO


csvdata = StringIO("""date,OVER_price,DI1J95_price

1995-01-02,48.61,45.662

1995-01-03,50.12,45.542

2019-03-11,6.40,""")


# index is a string

df = pd.read_csv(csvdata, sep=",", index_col="date")


# string being used

print(df.at['1995-01-03', 'OVER_price'])

产生50.12.


import pandas as pd

from pandas.compat import StringIO


csvdata = StringIO("""date,OVER_price,DI1J95_price

1995-01-02,48.61,45.662

1995-01-03,50.12,45.542

2019-03-11,6.40,""")


# index is going to be a datetime

df = pd.read_csv(csvdata, sep=",", index_col="date", parse_dates=True, infer_datetime_format=True)


# select with a datetime

from datetime import datetime as dt

print(df.at[dt(year=1995, month=1, day=3), 'OVER_price'])


生产 50.12


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号