Как исправить: ValueError: невозможно установить строку с несовпадающими столбцами


Одна ошибка, с которой вы можете столкнуться при использовании pandas:

ValueError : cannot set a row with mismatched columns

Эта ошибка возникает, когда вы пытаетесь добавить новую строку в кадр данных pandas, но количество значений в новой строке не соответствует количеству столбцов в существующем кадре данных.

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, мы создаем следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],
 'points': [18, 22, 19, 14, 14, 11, 20, 28, 22],
 'assists': [5, 7, 7, 9, 12, 9, 9, 4, 8],
 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12, 9]})

#view DataFrame
df

 team points assists rebounds
0 A 18 5 11
1 B 22 7 8
2 C 19 7 10
3 D 14 9 6
4 E 14 12 6
5 F 11 9 5
6 G 20 9 9
7 H 28 4 12
8 I 22 8 9

Теперь предположим, что мы пытаемся добавить новую строку в конец DataFrame:

#define new row to append
new_team = ['J', 30]

#append row to DataFrame
df.loc[ len(df)] = new_team

#view updated DataFrame
df

ValueError : cannot set a row with mismatched columns

Мы получаем ValueError , потому что новая строка, которую мы пытаемся добавить, содержит только два значения, а существующий DataFrame имеет четыре столбца.

Как исправить ошибку

Самый простой способ исправить эту ошибку — использовать функцию append() для добавления новой строки в конец DataFrame, которая автоматически заполнит отсутствующие значения NaN:

Следующий синтаксис показывает, как использовать эту функцию на практике:

#define new row to append
new = ['J', 30]

#append row to end of DataFrame
df = df.append(pd.Series (new, index=df.columns [: len (new)]), ignore_index= True )

#view updated DataFrame
df

 team points assists rebounds
0 A 18 5.0 11.0
1 B 22 7.0 8.0
2 C 19 7.0 10.0
3 D 14 9.0 6.0
4 E 14 12.0 6.0
5 F 11 9.0 5.0
6 G 20 9.0 9.0
7 H 28 4.0 12.0
8 I 22 8.0 9.0
9 J 30 NaN NaN

Обратите внимание, что мы не получаем никаких ошибок ValueError , а новая строка добавлена в конец DataFrame.

Также обратите внимание, что оба пропущенных значения в новой строке были просто заполнены значениями NaN.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить: столбцы перекрываются, но суффикс не указан
Как исправить: объект «numpy.ndarray» не имеет атрибута «добавлять»
Как исправить: при использовании всех скалярных значений необходимо передать индекс

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.