Python 如何获得列车和测试集的虚拟变量?
我想为训练集和测试集创建分类字段的虚拟变量,然后只在训练集和测试集中的公共特征上训练分类器。我正在运行以下代码,用于在两个数据集中创建虚拟变量,但得到TypeError 我在Jupyter笔记本的一个单元格中键入了以下内容Python 如何获得列车和测试集的虚拟变量?,python,pandas,machine-learning,feature-selection,categorical-data,Python,Pandas,Machine Learning,Feature Selection,Categorical Data,我想为训练集和测试集创建分类字段的虚拟变量,然后只在训练集和测试集中的公共特征上训练分类器。我正在运行以下代码,用于在两个数据集中创建虚拟变量,但得到TypeError 我在Jupyter笔记本的一个单元格中键入了以下内容 def get_features(train, test): trainval = list(train.columns.values) # list train features testval = list(test.columns.values) # list test
def get_features(train, test):
trainval = list(train.columns.values) # list train features
testval = list(test.columns.values) # list test features
features = list(set(trainval) & set(testval)) # check wich features are in common (remove the outcome column)
features.remove('Id') # remove non-usefull id column
return features
def process_features(train,test):
tables=[test,train]
for table in tables:
table['SoldDt']= table[['MoSold','YrSold']].apply(lambda x : '{}-{}'.format(x[0],x[1]), axis=1)
table['YearBuilt']= pd.to_datetime(table.YearBuilt,format="%Y")
table['YearRemodAdd']= pd.to_datetime(table.YearRemodAdd,format="%Y")
table['SoldDt']= pd.to_datetime(table.SoldDt,format="%m-%Y")
table.GarageYrBlt.fillna(1,inplace=True)
table.GarageYrBlt=table.GarageYrBlt.apply(int)
table.GarageYrBlt.replace(1,'NaT',inplace=True)
table['GarageYrBlt']= pd.to_datetime(table.GarageYrBlt,format="%Y")
del table['MoSold']
del table['YrSold']
table['MSSubClass']=table['MSSubClass'].apply(str)
table['OverallQual']=table['OverallQual'].apply(str)
table['OverallCond']=table['OverallCond'].apply(str)
table.Alley.fillna("NotAvl",inplace=True)
table.BsmtQual.fillna("NB",inplace=True)
table.BsmtCond.fillna("NB",inplace=True)
table.BsmtExposure.fillna("NB",inplace=True)
table.BsmtFinType1.fillna("NB",inplace=True)
table.BsmtFinType2.fillna("NB",inplace=True)
table.FireplaceQu.fillna("NF",inplace=True)
table.GarageType.fillna("NG",inplace=True)
table.GarageFinish.fillna("NG",inplace=True)
table.GarageQual.fillna("NG",inplace=True)
table.GarageCond.fillna("NG",inplace=True)
table.PoolQC.fillna("NP",inplace=True)
table.Fence.fillna("NFe",inplace=True)
table.MiscFeature.fillna("NotAvl",inplace=True)
table.LotFrontage.fillna(0,inplace=True)
table=table.dropna(inplace=True)
table=pd.get_dummies(table)
features = get_features(train,test)
return train,test,features
然后,我调用另一个单元格中的函数
train = pd.read_csv('/mnt/disk2/Data/HousePrices/train.csv')
test = pd.read_csv('/mnt/disk2/Data/HousePrices/test.csv')
train,test,features = process_features(train,test)
我正在犯错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-b2727d6cdc63> in <module>()
1 train = pd.read_csv('/mnt/disk2/Data/HousePrices/train.csv')
2 test = pd.read_csv('/mnt/disk2/Data/HousePrices/test.csv')
----> 3 train,test,features = process_features(train,test)
<ipython-input-16-dc47e5e9f9b6> in process_features(train, test)
40
41 table=table.dropna(inplace=True)
---> 42 table=pd.get_dummies(table)
43
44 print ("Getting features...")
/usr/local/lib/python3.5/dist-packages/pandas/core/reshape.py in get_dummies(data, prefix, prefix_sep, dummy_na, columns, sparse, drop_first)
1102 else:
1103 result = _get_dummies_1d(data, prefix, prefix_sep, dummy_na,
-> 1104 sparse=sparse, drop_first=drop_first)
1105 return result
1106
/usr/local/lib/python3.5/dist-packages/pandas/core/reshape.py in _get_dummies_1d(data, prefix, prefix_sep, dummy_na, sparse, drop_first)
1123 # if all NaN
1124 if not dummy_na and len(levels) == 0:
-> 1125 return get_empty_Frame(data, sparse)
1126
1127 codes = codes.copy()
/usr/local/lib/python3.5/dist-packages/pandas/core/reshape.py in get_empty_Frame(data, sparse)
1115 index = data.index
1116 else:
-> 1117 index = np.arange(len(data))
1118 if not sparse:
1119 return DataFrame(index=index)
TypeError: object of type 'NoneType' has no len()
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
1列=pd.read_csv('/mnt/disk2/Data/HousePrices/train.csv'))
2 test=pd.read_csv('/mnt/disk2/Data/HousePrices/test.csv'))
---->3列车、测试、特性=过程和特性(列车、测试)
过程中功能(列车、测试)
40
41 table=table.dropna(就地=真)
--->42表=pd.get_假人(表)
43
44打印(“获取功能…”)
/get_dummies中的usr/local/lib/python3.5/dist-packages/pandas/core/reformate.py(数据、前缀、前缀_sep、伪_na、列、稀疏、先放_)
1102其他:
1103结果=_get_dummies_1d(数据,前缀,前缀_sep,虚拟_na,
->1104稀疏=稀疏,drop_first=drop_first)
1105返回结果
1106
/usr/local/lib/python3.5/dist-packages/pandas/core/reformate.py in_get_dummies_1d(数据、前缀、前缀、sep、dummy_na、稀疏、首先删除)
1123#如果都是NaN
1124如果不是虚拟的,则na和len(级别)==0:
->1125返回get_empty_帧(数据,稀疏)
1126
1127代码=代码。复制()
/获取空帧中的usr/local/lib/python3.5/dist-packages/pandas/core/reformate.py(数据,稀疏)
1115 index=data.index
1116其他:
->1117指数=np.arange(len(数据))
1118如果不是稀疏的:
1119返回数据帧(索引=索引)
TypeError:类型为“NoneType”的对象没有len()
在这一行
table=table.dropna(inplace=True)
返回None
,因为文档状态为
但随后您尝试将该None
值传递到此行的get_dummies()
table=table.dropna(inplace=True)
返回None
,因为文档状态为
但是您试图将该
None
值传递给get_dummies()
请包含整个未桥接代码和整个未桥接错误消息。您的问题可能是test
或train
是None
,并且试图对其执行len()
,因为它假设您传递了一个“类似数组、序列或数据帧”的数据。嗨,Brian,包含完整代码,请勾选并输入一个新的单元格,显示test
和train
现在是什么。其中一个一定不正确。重新运行分配的单元格后会发生什么?正如@Brian Cain在他的回答中所说,您需要将table=table.dropna(inplace=True)
更改为table.dropna(inplace=True)
。无需将其重新分配到表
。请包含完整的未桥接代码和完整的未桥接错误消息。您的问题可能是test
或train
是None
,并且试图对其执行len()
,因为它假设您传递了一个“类似数组、序列或数据帧”的数据。嗨,Brian,包含完整代码,请勾选并输入一个新的单元格,显示test
和train
现在是什么。其中一个一定不正确。重新运行分配的单元格后会发生什么?正如@Brian Cain在他的回答中所说,您需要将table=table.dropna(inplace=True)
更改为table.dropna(inplace=True)
。无需将其重新分配给表
。我太笨了,如果我使用inplace=True,则无需将其分配给表,或者我可以分配它,但我不应使用inplace=True。谢谢。我太笨了,如果我使用inplace=True,就不需要将它分配给表,或者我可以分配它,但我不应该使用inplace=True。谢谢