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

Pandas Dataframe .loc Boolean 将索引附加到第一列

Pandas Dataframe .loc Boolean 将索引附加到第一列

慕工程0101907 2021-06-06 12:55:47
为什么索引似乎附加到数据帧的 .loc 布尔选定行的第一列?数据框:       date  price0  20180926    1001  20180925     992  20180924     983  20180923     97代码:import pandas as pdd = {'date': ['20180926', '20180925','20180924','20180923'], 'price': [100,99,98,97]}df = pd.DataFrame(d)a = df.loc[df['date'] == '20180924']print(a['date'])产量:2    20180924Name: date, dtype: object“2”索引似乎自动附加到“日期”字段的前面。然而:b=a.iloc[0]['date']print(b)产量:20180924我希望这两种方法都能产生与“b”相同的结果。
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

看起来当您将列表传递到数据帧上的 loc 或 iloc 时,将始终返回数据帧(请注意,这df['date'] == '20180924'是一个布尔值列表)。


type(df.loc[df['date'] == '20180924']) = pandas.core.frame.DataFrame

type(df.loc[[0]]) = pandas.core.frame.DataFrame

type(df.iloc[[0]]) = pandas.core.frame.DataFrame

但是,如果您将索引(假设您的数据帧不是多索引)传递到数据帧上的 loc 或 iloc 中,则会产生一个系列:


type(df.loc[0]) = pandas.core.series.Series

type(df.iloc[0]) = pandas.core.series.Series

df.loc[0]并且df.iloc[0]是相同的(尽管情况并非总是如此,请参阅此处的原因)。这是结果:


date     20180926

price         100

Name: 0, dtype: object

同样,如果您将索引传递给系列上的 iloc,它将产生一个标量(即返回一个值):


type(df.iloc[0].iloc[0])

在这种情况下,您将选择系列中的第 0 个定位元素df.iloc[0],即'20180926'. 请注意,调用df.iloc[0].loc[0]无效,因为 0 不是本系列中的索引。df.iloc[0]系列中的指数是日期和价格。


查看完整回答
反对 回复 2021-06-29
?
达令说

TA贡献1821条经验 获得超6个赞

使用[]将返回pd.Series


a['date'][2]

Out[257]: '20180924'

a.iloc[0]['date']

Out[258]: '20180924'


a.loc[2,'date']

Out[259]: '20180924'


查看完整回答
反对 回复 2021-06-29
  • 2 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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