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

为什么索引似乎附加到数据帧的 .loc 布尔选定行的第一列?


数据框:


       date  price

0  20180926    100

1  20180925     99

2  20180924     98

3  20180923     97

代码:


import pandas as pd

d = {'date': ['20180926', '20180925','20180924','20180923'], 'price': [100,99,98,97]}

df = pd.DataFrame(d)

a = df.loc[df['date'] == '20180924']

print(a['date'])

产量:


2    20180924

Name: date, dtype: object

“2”索引似乎自动附加到“日期”字段的前面。


然而:


b=a.iloc[0]['date']

print(b)

产量:


20180924

我希望这两种方法都能产生与“b”相同的结果。


慕工程0101907
浏览 187回答 2
2回答

呼如林

看起来当您将列表传递到数据帧上的 loc 或 iloc 时,将始终返回数据帧(请注意,这df['date'] == '20180924'是一个布尔值列表)。type(df.loc[df['date'] == '20180924']) = pandas.core.frame.DataFrametype(df.loc[[0]]) = pandas.core.frame.DataFrametype(df.iloc[[0]]) = pandas.core.frame.DataFrame但是,如果您将索引(假设您的数据帧不是多索引)传递到数据帧上的 loc 或 iloc 中,则会产生一个系列:type(df.loc[0]) = pandas.core.series.Seriestype(df.iloc[0]) = pandas.core.series.Seriesdf.loc[0]并且df.iloc[0]是相同的(尽管情况并非总是如此,请参阅此处的原因)。这是结果:date     20180926price         100Name: 0, dtype: object同样,如果您将索引传递给系列上的 iloc,它将产生一个标量(即返回一个值):type(df.iloc[0].iloc[0])在这种情况下,您将选择系列中的第 0 个定位元素df.iloc[0],即'20180926'. 请注意,调用df.iloc[0].loc[0]无效,因为 0 不是本系列中的索引。df.iloc[0]系列中的指数是日期和价格。

达令说

使用[]将返回pd.Seriesa['date'][2]Out[257]: '20180924'a.iloc[0]['date']Out[258]: '20180924'a.loc[2,'date']Out[259]: '20180924'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python