如何将假人添加到 Pandas DataFrame?

Posted

技术标签:

【中文标题】如何将假人添加到 Pandas DataFrame?【英文标题】:How to add dummies to Pandas DataFrame? 【发布时间】:2019-07-12 10:38:43 【问题描述】:

我有一个如下所示的 data_df:

   price vehicleType  yearOfRegistration    gearbox  powerPS  model  kilometer fuelType       brand notRepairedDamage  postalCode
0  18300       coupe                2011    manuell      190    NaN     125000   diesel        audi                ja       66954
1   9800         suv                2004  automatik      163  grand     125000   diesel        jeep               NaN       90480
2   1500  kleinwagen                2001    manuell       75   golf     150000   benzin  volkswagen              nein       91074
3   3600  kleinwagen                2008    manuell       69  fabia      90000   diesel       skoda              nein       60437
4    650   limousine                1995    manuell      102    3er     150000   benzin         bmw                ja       33775

尝试将分类列 (vehicleType) 转换为假人(“one hot encoding”):

columns = [ 'vehicleType' ] #, 'gearbox', 'model', 'fuelType', 'brand', 'notRepairedDamage' ]
for column in columns:
  dummies = pd.get_dummies(data_df[column], prefix=column)
  data_df.drop(columns=[column], inplace=True)
  data_df = data_df.add(dummies, axis='columns')

但是原始数据丢失了:

  brand fuelType gearbox  kilometer model notRepairedDamage  ...  vehicleType_coupe  vehicleType_kleinwagen  vehicleType_kombi  vehicleType_limousine  vehicleType_suv  yearOfRegistration
0   NaN      NaN     NaN        NaN   NaN               NaN  ...                NaN                     NaN                NaN                    NaN              NaN                 NaN
1   NaN      NaN     NaN        NaN   NaN               NaN  ...                NaN                     NaN                NaN                    NaN              NaN                 NaN
2   NaN      NaN     NaN        NaN   NaN               NaN  ...                NaN                     NaN                NaN                    NaN              NaN                 NaN
3   NaN      NaN     NaN        NaN   NaN               NaN  ...                NaN                     NaN                NaN                    NaN              NaN                 NaN
4   NaN      NaN     NaN        NaN   NaN               NaN  ...                NaN                     NaN                NaN                    NaN              NaN                 NaN

那么,如何用假人替换给定的列?

【问题讨论】:

您能否提供一个稍微简化一些的示例(列数更少——2 到 3)并为它们提供您预期的输出? 【参考方案1】:
# Get one hot encoding of columns 'vehicleType'
one_hot = pd.get_dummies(data_df['vehicleType'])
# Drop column as it is now encoded
data_df = data_df.drop('vehicleType',axis = 1)
# Join the encoded df
data_df = data_df.join(one_hot)
data_df 

【讨论】:

pd.get_dummies 可以做到这一切。 pd.get_dummies(data_df, columns=['vehicleType'], prefix='', prefix_sep='') 以前的评论应该是公认的答案【参考方案2】:

你可以使用更紧凑的方式:

data_df = pd.get_dummies(data,columns=['vehicleType'],drop_first=True)

此行将删除您的旧列“vehicleType”,并自动将创建的列加入您的数据集

【讨论】:

以上是关于如何将假人添加到 Pandas DataFrame?的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:将系列添加到按列排序的 DataFrame

如何在pandas dataframe中为新列添加值?

Pandas 将剪切列添加到 DataFrame

将字典值增量添加到 pandas DataFrame。具有dict键列名的DataFrame

将 uuid 添加到 pandas DataFrame 中的新列

向 pandas DataFrame 添加多个空列