Pandas 使用dataframe和ndarray进行回归有什么区别?

Pandas 使用dataframe和ndarray进行回归有什么区别?,pandas,numpy,scikit-learn,Pandas,Numpy,Scikit Learn,我想知道为什么在进行回归时需要将数据帧转换为ndarray,因为在不转换数据帧时,截距和coef的结果是相同的 import matplotlib.pyplot as plt import pandas as pd import pylab as pl import numpy as np from sklearn import linear_model %matplotlib inline # import data and create dataframe !wget -O FuelCo

我想知道为什么在进行回归时需要将数据帧转换为ndarray,因为在不转换数据帧时,截距和coef的结果是相同的

import matplotlib.pyplot as plt
import pandas as pd
import pylab as pl
import numpy as np
from sklearn import linear_model
%matplotlib inline

# import data and create dataframe

!wget -O FuelConsumption.csv https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/FuelConsumptionCo2.csv    

df = pd.read_csv("FuelConsumption.csv")
cdf = df[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB','CO2EMISSIONS']]

# Split train/ test data

msk = np.random.rand(len(df)) < 0.8 
train = cdf[msk] 
test = cdf[~msk] 

# Modeling

regr = linear_model.LinearRegression()

train_x = np.asanyarray(train[['ENGINESIZE']])
train_y = np.asanyarray(train[['CO2EMISSIONS']])

**# if I use the dataframe, train[['ENGINESIZE']] for 'x', and train[['CO2EMISSIONS']] for 'y' 
below, I get the same result**

regr.fit (train_x, train_y) 

# The coefficients
print ('Coefficients: ', regr.coef_)
print ('Intercept: ',regr.intercept_)
多谢各位

因此df是加载的数据帧,cdf是另一个具有选定列的帧,train是选定行

train['ENGINESIZE']]是一个1列数据帧,我相信train['ENGINESIZE']将是一个系列

我认为从数据帧获取数组的首选语法是:

 train[['ENGINESIZE']].values          # or
 train[['ENGINESIZE']].to_numpy()
虽然

 np.asanyarray(train[['ENGINESIZE']])
应该做同样的事情

深入研究regr.fit代码,我看到它调用sklearn.utils.check_X_y,这反过来又调用sklearn.tils.check_数组。它负责将输入转换为numpy数组,并了解一些数据帧特性,例如多个数据类型


因此,如果fit接受您的数据帧,您不需要提前转换它们。但是,如果您可以从数据帧获得一个好的数组,那么这样做也没有坏处。无论采用哪种方式,都可以使用从数据帧派生的数组进行拟合。

数据帧只是一个增强的ndarray,它在下面使用ndarray。唯一的原因是速度和优化,我认为没有其他理由使用ndarray而不是dataframe。以免避免额外的一层复杂性