Как исправить: 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» не имеет атрибута «добавлять»
Как исправить: при использовании всех скалярных значений необходимо передать индекс