【问题标题】:Feature engineering, ValueError: Columns must be same length as key特征工程,ValueError:列必须与键长度相同
【发布时间】:2022-01-09 11:01:40
【问题描述】:

我在尝试对Type 列进行编码时遇到了ValueError: Columns must be same length as key。以下是代码,不知道哪一部分错了。

df.head()

plt.figure(figsize=(7, 5))
sns.heatmap(df.isnull(), cmap='viridis')
df.isnull().any()

df.isnull().sum()

df['Rating'] = df['Rating'].fillna(df['Rating'].median())

replaces = [u'\u00AE', u'\u2013', u'\u00C3', u'\u00E3', u'\u00B3', '[', ']', "'"]
for i in replaces:
    df['Current Ver'] = df['Current Ver'].astype(str).apply(lambda x : x.replace(i, ''))

regex = [r'[-+|/:/;(_)@]', r'\s+', r'[A-Za-z]+']
for j in regex:
    df['Current Ver'] = df['Current Ver'].astype(str).apply(lambda x : re.sub(j, '0', x))

df['Current Ver'] = df['Current Ver'].astype(str).apply(lambda x : x.replace('.', ',',1).replace('.', '').replace(',', '.',1)).astype(float)
df['Current Ver'] = df['Current Ver'].fillna(df['Current Ver'].median())

i = df[df['Category'] == '1.9'].index
df.loc[i]

df = df.drop(i)
df = df[pd.notnull(df['Last Updated'])]
df = df[pd.notnull(df['Content Rating'])]
le = preprocessing.LabelEncoder()
df['App'] = le.fit_transform(df['App'])
category_list = df['Category'].unique().tolist() 
category_list = ['cat_' + word for word in category_list]
df = pd.concat([df, pd.get_dummies(df['Category'], prefix='cat')], axis=1)
le = preprocessing.LabelEncoder()
df['Genres'] = le.fit_transform(df['Genres'])
le = preprocessing.LabelEncoder()
df['Content Rating'] = le.fit_transform(df['Content Rating'])
df['Price'] = df['Price'].apply(lambda x : x.strip('$'))
df['Installs'] = df['Installs'].apply(lambda x : x.strip('+').replace(',', ''))
df['Type'] = pd.get_dummies(df['Type'])

【问题讨论】:

标签: python dataframe encoding data-science feature-engineering


【解决方案1】:

您正在尝试将具有多列到一列的 DataFrame 映射到原始 DataFrame。

pd.get_dummies 返回一个 DataFrame,其中每个值对应一个列。

如果您想将这些值添加到原始 DataFrame 中,您可以使用 concat。

例子:

import pandas as pd

df = pd.DataFrame(data=['type1', 'type2', 'type3'], columns=['Type'])
dummies_df = pd.get_dummies(df['Type'])
pd.concat([df, dummies_df], axis=1)

【讨论】:

  • 不,我不会。这不是它的工作原理。同样,您应该提供一个小示例,您可以在 stackoverflow 中发布该示例来重现您遇到的问题。我很确定用df = pd.concat([df, pd.get_dummies(df['Type'])], axis=1)) 替换行df['Type'] = pd.get_dummies(df['Type']) 会解决您遇到的问题。
猜你喜欢
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 2022-01-23
  • 2018-11-04
相关资源
最近更新 更多