Top.Mail.Ru
Ответы

Помогите, пожалуйста, исправить ошибку ValueError: Shape of passed values is (30471, 1), indices imply (30471, 4)

1234567891011121314151617181920212223242526272829303132333435363738
 from sklearn import preprocessing 
np.random.seed(34) 
 
# сгенерируем датасет из случайных чисел 
df = pd.DataFrame({ 
    # Бета распределение, 5 – значение альфа, 1 – значение бета, 1000 – размер 
    'beta': np.random.beta(5, 1, 1000) * 60, 
 
    # Экспоненциальное распределение, 10 – "резкость" экспоненты, 1000 – размер 
    'exponential': np.random.exponential(10, 1000), 
 
    # Нормальное распределение, 10 – среднее значение р., 2 – стандартное отклонение, 1000 – количество сэмплов 
    'normal_p': np.random.normal(10, 2, 1000), 
 
    # Нормальное распределение, 10 – среднее значение р., 10 – стандартное отклонение, 1000 – количество сэмплов 
    'normal_l': np.random.normal(10, 10, 1000), 
}) 
 
# Копируем названия столбцов, которые теряются при использовании fit_transform() 
col_names = list(df.columns) 
 
# инициализируем стандартизатор StandardScaler 
s_scaler = preprocessing.StandardScaler() 
 
# кодируем исходный датасет 
df_s = s_scaler.fit_transform(sber_data[['price_doc']]) 
 
# Преобразуем промежуточный датасет в полноценный датафрейм для визуализации 
df_s = pd.DataFrame(df_s, columns=col_names) 
 
fig, (ax1) = plt.subplots(ncols=1, figsize=(10, 8)) 
ax1.set_title('Распределения после StandardScaler') 
 
sns.kdeplot(df_s['beta'], ax=ax1) 
sns.kdeplot(df_s['exponential'], ax=ax1) 
sns.kdeplot(df_s['normal_p'], ax=ax1) 
sns.kdeplot(df_s['normal_l'], ax=ax1) 
df_s.describe() 
По дате
По рейтингу
Аватар пользователя
11мес

Для исправления ошибки ValueError: Shape of passed values is (30471, 1), indices imply (30471, 4) вам нужно изменить строку кода, где вы используете StandardScaler. Вместо использования sber_data[['price_doc']], вам следует использовать df, который вы создали ранее.

Замените эту строку:

123456789
 df_s = s_scaler.fit_transform(sber_data[['price_doc']])
```

На эту строку:
```python
df_s = s_scaler.fit_transform(df)
```

После этого ваш код должен успешно выполниться без ошибок. Надеюсь, это поможет! Если у вас возникнут еще вопросы, не стесняйтесь обращаться. 
Аватар пользователя
Оракул
11мес

Ошибка возникает из-за несоответствия между количеством столбцов в исходном датафрейме и количеством столбцов, которые вы пытаетесь использовать при создании нового датафрейма.

12345678910111213141516171819202122232425262728293031323334
 from sklearn import preprocessing  
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 
 
np.random.seed(34)  
 
# сгенерируем датасет из случайных чисел  
df = pd.DataFrame({  
    'beta': np.random.beta(5, 1, 1000) * 60,  
    'exponential': np.random.exponential(10, 1000),  
    'normal_p': np.random.normal(10, 2, 1000),  
    'normal_l': np.random.normal(10, 10, 1000),  
})  
 
# инициализируем стандартизатор StandardScaler 
s_scaler = preprocessing.StandardScaler()  
 
# кодируем исходный датасет  
df_s = s_scaler.fit_transform(df)  
 
# Преобразуем промежуточный датасет в полноценный датафрейм для визуализации  
df_s = pd.DataFrame(df_s, columns=df.columns)  
 
fig, ax1 = plt.subplots(ncols=1, figsize=(10, 8))  
ax1.set_title('Распределения после StandardScaler')  
 
sns.kdeplot(data=df_s, ax=ax1) 
plt.legend(df_s.columns) 
 
print(df_s.describe()) 
 
plt.show()