一键编码2个不同的特征,然后将结果一键编码的列与Pandas中的原始数据帧连接起来,我得到了3个数据帧。
第一个是OneHotZips(包含我的单点编码功能#1)。 第二个是OneHotYearBuilt(同样,即我的功能#2作为数据帧中的一个热编码列)。 最后,我有一个子集,这是前两个与原始数据帧结合在一起的子集。更具体地说,subset.keys()为:
Index(['lat_z', 'lon_z', 'price_z', 'lot_z', 'LotSizeSquareFeet',
'TotalBedrooms', 'NormalizedBathCount', 'PropertyAddressLatitude',
'PropertyAddressLongitude', 'MonthsToSale',
...
'year_built_2008.0', 'year_built_2009.0', 'year_built_2010.0',
'year_built_2011.0', 'year_built_2012.0', 'year_built_2013.0',
'year_built_2014.0', 'year_built_2015.0', 'year_built_2016.0',
'year_built_2017.0'],
dtype='object', length=477)
我只想在一个名为downsampled_z的新数据框中使用这些列中的某些列。
我已经可以得到一个字符串了吗?
'"' + '", "'.join(list(OneHotZips.columns.values)) + '"'
它看起来像:
'"year_built_1882.0", "year_built_1900.0", ... "year_built_2017.0"'
这似乎是我想要的方式,但是以下操作无效:
downsampled_z = subset[["lat_z", "lon_z", "price_z", "lot_z", "TotalBedrooms", "NormalizedBathCount", "built_prct",
'"' + '", "'.join(list(OneHotZips.columns.values)) + '"',
'"' + '", "'.join(list(OneHotYearBuilt.columns.values)) + '"']]
这将导致
的键错误'[\'"year_built_1882.0", "year_built_1900.0", ... "year_built_2017.0"\'] not in index
我采用的其他方法,例如
[str(x) for x in list(OneHotZips.columns.values)]
导致
ValueError: setting an array element with a sequence
答案 0 :(得分:1)
这是因为您实际上是在创建一个长字符串,而不是您的列名。您可以使用:
downsampled_cols = ["lat_z", "lon_z", "price_z", "lot_z", "TotalBedrooms", "NormalizedBathCount", "built_prct"] +\
list(OneHotZips.columns.values) +\
list(OneHotYearBuilt.columns.values) +\
...
然后
downsampled_z = subset[downsampled_cols]
如果您加入一个字符串列表,最终将得到一个字符串。
我认为您的困惑基本上是由于其他原因。在Python中,print
语句不显示变量的类型。也就是说,如果您print('abc')
会得到abc
(不带引号),而print(123)
会给您123
(也带引号)。如果改用repr
,则会看到引号或引号不存在。但这会使人感到困惑。我的意思是说Duck Typing。不必担心在输出中明确看到引号。如果变量值中包含字母,则变量类型为string
。当然,您可以将数字存储为字符串,这可能会引起混淆。