【问题标题】:Encoding categorical data to numerical将分类数据编码为数值
【发布时间】:2021-03-30 03:12:09
【问题描述】:

我正在使用这个 Kaggle 数据集,我正在尝试将分类值转换为数值,以便我可以应用回归。

https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data

这是我迄今为止尝试过的一个示例。

train_data = pd.read_csv('train.csv')

column_contents = []
for row in train_data['Street']:
 if type(row) not in (int,float):
 column_contents.append(row)
 unique_contents = set(column_contents)

ds = {}
for i,j in enumerate(unique_contents):
 ds[j] = i 

train_data['Street'] = train_data['Street'].replace(ds.keys(), list(map(str, ds.values())), regex=True)

此后,我创建了以下函数以将其应用于 df 的所有列:

def calculation(df,column):
 column_contents = []
 for row in df[column]:
  if type(row) not in (int,float):
   column_contents.append(row)
   unique_contents = set(column_contents)

 ds = {}
 for i,j in enumerate(unique_contents):
  ds[j] = i 

df[column] = df[column].replace(ds.keys(), list(map(str, ds.values())), regex=True)

return df[column]

for column in train_data:
 train_data[column] = calculation(train_data,column)

但是,这个功能不起作用,而且我认为它在很多层面上都是错误的。任何帮助将不胜感激。 我也知道这可以使用其他模块(numpy)来完成,但我宁愿这样做来练习。

【问题讨论】:

  • 您能否在帖子正文中发布数据样本和所需结果,而不使用可能对未来读者无效的外部链接?您对循环的使用似乎过于复杂,无法转换为分类列。

标签: python pandas data-conversion categorical-data


【解决方案1】:

您已正确编码,期望在替换中使用regex=True。由于您想用值替换匹配的键,因此不应使用regex。 NaN 也必须单独处理。

同样在 calculation 方法中,您已经替换了数据框中的列,因此您不必返回它并再次分配它。

代码:

train_data = pd.read_csv('train.csv')
# Replace all NaNs with -1
train_data = train_data.fillna(-1)

def calculation(df,column):
  column_contents = []
  for row in df[column]:
    if type(row) not in (int,float):
      column_contents.append(row)
  
  unique_contents = set(column_contents)
  ds = {}
  for i,j in enumerate(unique_contents):
    ds[j] = i 
  
  df[column] = df[column].replace(ds.keys(), list(map(str, ds.values()))).astype(float)

for column in train_data:
  calculation(train_data,column)

print (train_data.dtypes)

输出:

Id               float64
MSSubClass       float64
MSZoning         float64
LotFrontage      float64
LotArea          float64
                  ...   
MoSold           float64
YrSold           float64
SaleType         float64
SaleCondition    float64
SalePrice        float64
Length: 81, dtype: object

如您所见,所有列都转换为float

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多