Разница между [] и [[]] в Python

#python #pandas

#python #pandas

Вопрос:

Я прохожу курс на Coursera под названием «Анализ данных с помощью Python». Я новичок в Python. У меня есть некоторый опыт работы с C и MATLAB. Вот почему я не сталкивался с такой большой проблемой, за исключением одной вещи.

Сначала, пожалуйста, взгляните на следующий код.

 import pandas as pd

#path of data
path = 'https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DA0101EN-SkillsNetwork/labs/Data files/automobileEDA.csv'
df = pd.read_csv(path)

from sklearn.linear_model import LinearRegression

lm = LinearRegression()

X = df[['highway-mpg']] #'highway-mpg' is a column in the dataframe
Y = df['price'] #'price' is a column in the dataframe

lm.fit(X,Y)
 

Здесь при определении X они использовали двойные квадратные скобки [[]] и в случае Y использования [] . Я знаю, что квадратные скобки используются для перечисления в Python, и возможен вложенный список. Но, похоже, это не вложенный список. Не могли бы вы провести различие между ними?

Комментарии:

1. df[['col']] дает вам фрейм данных с 1 столбцом, df['col'] дает вам серию (т. Е. Сам столбец)

2. df['price'] даст вам серию, тогда df[['price']] как дает вам фрейм данных только со столбцом 'price' as.

3. Со строго синтаксической точки зрения df[['highway-mpg']] эквивалентно df.__getitem__(['highway-mpg']) . Внешние и внутренние скобки обрабатываются отдельно.

Ответ №1:

Один из них разрезает фрейм данных и возвращает вложенный фрейм данных, другой выбирает ровно один столбец и выдает его как Series :

  • Если вы передадите список строк в скобки [['a', 'c']] , вы получите DataFrame , который содержит только тот столбец, который вы запросили
  • Если вы передадите строку в скобки ['a'] , вы получите только a Series , который соответствует указанному вами имени

Пример

 df = pd.DataFrame([
    {'a': 1, 'b': 2, 'c': 4},
    {'a': 3, 'b': 4, 'c': 6},
])

print(df['a'])
# That is a Series
0    1
1    3
Name: a, dtype: int64
# -------------------------------------------
print(df[['a']])
# That is a DataFrame
   a
0  1
1  3
# -------------------------------------------
print(df[['a', 'c']])
# That is a DataFrame
   a  c
0  1  4
1  3  6
 

Ответ №2:

если вы хотите использовать или возвращать один столбец фрейма данных, т.Е. Возвращает серию, тогда используйте df['xyz'] , если вы хотите вернуть или использовать несколько столбцов, которые вы можете использовать df[['xyz','abc','ijk']] , который возвращает другой фрейм данных с указанными столбцами.

Примечание

df[['xyz']] это разрешено, но df['xyz','abc','ijk'] это не разрешено.

 df1=pd.DataFrame({"Col":[1,2,3],"Row":[2,3,4],"value":[6,5,7],"ree":[0,0,0]})
df1


  Col Row  value ree
0   1   2   6   0
1   2   3   5   0
2   3   4   7   0

df1['Col']
0    1
1    2     # Series object
2    3
Name: Col, dtype: int64

df1[['Col']]
    Col
0   1
1   2      # DataFrame object
2   3

df1[["Col","Row","value"]]
    Col Row value
0   1   2   6
1   2   3   5         # DataFrame object
2   3   4   7
 

в вашем случае X['h___...'] также можно использовать, поскольку есть только один столбец

Ответ №3:

[[]] обычно используется для передачи нескольких столбцов для извлечения из фрейма данных. Другим ключевым отличием является то, что он возвращает DataFrame

[] обычно используется для передачи одного столбца для извлечения из фрейма данных. Другим ключевым отличием является то, что он возвращает Series

Это одно из ключевых отличий при индексации фрейма данных. Оба выполняют одну и ту же предполагаемую операцию с разными типами возвращаемых данных

Комментарии:

1. Я не уверен в вашем первом пункте, поскольку я видел коды, в которых было передано несколько столбцов [] .

2. Вы можете попробовать это сами, при этом вы столкнетесь с ошибками 🙂

3. О, это была моя ошибка. Я все перепутал. Спасибо.

Ответ №4:

В машинном обучении и анализе данных обычно X обозначает независимые переменные, а y обозначает зависимую переменную. Цель состоит в том, чтобы предсказать одну зависимую переменную y, используя две или несколько независимых переменных X. И, в Pandas [[]] используется для получения переменного количества столбцов. Вот почему [[]] используется для X и [] для y

Ответ №5:

[[colname1,colname2,colnamen]] таким образом, вы выбираете несколько столбцов из фрейма данных, тогда как [«target_name»] вам нужно указать только имя столбца, поскольку оно всего одно.