Логический индекс Pandas Dataframe .loc для первого столбца - PullRequest
0 голосов
/ 27 сентября 2018

Почему индекс добавляется к первому столбцу логической выбранной строки .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».

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Похоже, когда вы передаете список в 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] являются дата и цена.

0 голосов
/ 27 сентября 2018

Использование [] вернет pd.Series

a['date'][2]
Out[257]: '20180924'
a.iloc[0]['date']
Out[258]: '20180924'

a.loc[2,'date']
Out[259]: '20180924'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...