@coldspeed статус-по-воздуховоду-записано-вместе-работает-достаточно-достаточно :)
аем, что стандартный метод установки одной ячейки использует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
сделай это? Это документированное поведение или ошибка?