Задать вопрос

Почему возникает ошибка «length mismatch: expected axis has 3 elements, new values have 4 elements»?

Есть исходный файл Orders.xlsx :
Weekday	Shop1	Shop_2	Shop_3	Shop4
mon	7	1	7	8
tue	4	2		5
wed		5	2	3
thu	8		8	7
fri	15	11	13	9
sat	21	18	17	
sun	25	16	25	17

1) Нужно функцией rename_columns(test_df) переименовать столбцы исходного файла в формат shop_1, shop_2...
2) функцией fillna_values(test_df, n=0) заменить пробелы исходника на 1. ' n' - число и по умолчанию = 0
3) функцией etl() собрать итоговые отчеты в форматы 'csv' и 'xlsx' в дир исходного файла.
Вот мой код:
import pandas as pd
import os
orders_path = './data/Orders.xlsx'
n = 1
def rename_columns(test_df):
    test_df.columns = ['Shop_1', 'Shop_2', 'Shop_3', 'Shop_4']
    expected_columns = 4
    if len(test_df.columns) != expected_columns:
        print(f"Ожидалось {expected_columns} столбца, но найдено {len(test_df.columns)}.")
        return None
    return test_df
test_df = pd.read_excel(orders_path, index_col=0)
if not os.path.exists(orders_path):
    print(f"Файл {orders_path} не найден.")

def fillna_values(test_df, n=0):
    res = rename_columns(test_df)
    return res.fillna(n)

def etl():
    res = fillna_values(test_df, n)
    res.to_csv('./data/Orders_etl.csv')
    res.to_excel('./data/Orders_etl.xlsx')
    return 'Файлы успешно сохранены'
result = etl()
print(result)

Все работает, но тест не проходит:
E   ValueError: Length mismatch: Expected axis has 3 elements, new values have 4 elements
=========================== short test summary info ============================
ERROR tests/test_solution.py - ValueError: Length mismatch: Expected axis has...
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!

длину проверил:
import pandas as pd
test_df = pd.read_excel('./data/Orders.xlsx', index_col=0)
print(len(test_df.columns))
test_df_res = pd.read_excel('./data/Orders_etl.xlsx', index_col=0)
print(len(test_df_res.columns))

Чего не так?
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
Maksim_64
@Maksim_64
Data Analyst
мне вот интересно, это задания с курсов каких то безумных? Никто в реале не будет писать функции rename_columns или fillna_values. Реально, если это с курсов это ну совсем не куда не годится.

Что касается этого безумного кода.

исходный фрейм у тебя имеет 5 на самом деле 3 колонки, о чем и сказано в ошибке колонок а ты пытаешься установить, 4 вот в этой строке
test_df.columns = ['Shop_1', 'Shop_2', 'Shop_3', 'Shop_4']

пример того безумия, что происходит
df = pd.DataFrame({
    'A':[1,2,3],
    'B':[4,5,6],
    'C':[6,7,8]
})
df.columns = ['AA','BB']
Ответ написан
@dim5x
ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
1. Я бы не стал, если этого нет в условиях, которые вы, быть может, не озвучили, менять сущность первого столбца. Прочёл бы без index_col=0: test_df = pd.read_excel(orders_path)
2. Переименовывание делал бы уже включая первый столбец:
test_df.columns = ['Weekday', 'Shop_1', 'Shop_2', 'Shop_3', 'Shop_4']

3.
test_df = pd.read_excel(orders_path, index_col=0)
if not os.path.exists(orders_path):
    print(f"Файл {orders_path} не найден.")

Делать проверку на наличие файла после того, как уже прочли его в датафрейм? Поменяйте последовательность.
4. Ну и меня смущает почему тестовая система хочет 3. Возникает вопрос о доп. условиях или что пытаетесь скормить результат тесту, не под той задачей, например.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы