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