Нам известно, что стандартным методом установки одной ячейки является at
или iat
.Тем не менее, я заметил интересное поведение, которое мне было интересно, может ли кто-нибудь объяснить.
При решении этого вопроса я сталкиваюсь со странным поведением loc
.
# Setup.
pd.__version__
# '0.24.0rc1'
df = pd.DataFrame({'A': [12, 23], 'B': [['a', 'b'], ['c', 'd']]})
df
A B
0 12 [a, b]
1 23 [c, d]
Чтобы установить ячейку (1, 'B'), достаточносделать это с помощью, как df.at[1, 'B'] = ...
.Но с помощью loc я сначала попробовал это, но это не сработало:
df.loc[1, 'B'] = ['m', 'n', 'o', 'p']
# ValueError: Must have equal len keys and value when setting with an iterable
Итак, я попробовал (что тоже не удалось)
df.loc[1, 'B'] = [['m', 'n', 'o', 'p']]
# ValueError: Must have equal len keys and value when setting with an ndarray
Я думал, что loc
тоже будет как-товозможность взять вложенные списки здесь.При странном повороте событий этот код работал:
df.loc[1, 'B'] = [['m'], ['n'], ['o'], ['p']]
df
A B
0 12 [a, b]
1 23 [m, n, o, p]
Почему loc
работает таким образом?Кроме того, если вы добавляете другой элемент в любой из списков, он проваливается:
df.loc[1, 'B'] = [['m'], ['n'], ['o'], ['p', 'q']]
# ValueError: Must have equal len keys and value when setting with an iterable
Пустые списки также не работают.Кажется бессмысленным вкладывать каждый элемент в свой список.
Почему loc
делает это?Это задокументированное поведение или ошибка?