Магия панд на работе. Вся логика отсутствует.
Сообщение об ошибке "ValueError: If using all scalar values, you must pass an index"
говорит, что вы должны передать индекс.
Это не обязательно означает, что передача индекса заставляет панд делать то, что вы от него хотите
Когда вы передаете индекс, pandas будет рассматривать ключи словаря как имена столбцов, а значения как то, что столбец должен содержать для каждого из значений в индексе.
a = 2
b = 3
df2 = pd.DataFrame({'A':a,'B':b}, index=[1])
A B
1 2 3
Передача большего индекса:
df2 = pd.DataFrame({'A':a,'B':b}, index=[1, 2, 3, 4])
A B
1 2 3
2 2 3
3 2 3
4 2 3
Индекс обычно автоматически генерируется кадром данных, если он не указан. Тем не менее, панды не знает, сколько строк 2
и 3
вы хотите. Однако вы можете быть более откровенным об этом
df2 = pd.DataFrame({'A':[a]*4,'B':[b]*4})
df2
A B
0 2 3
1 2 3
2 2 3
3 2 3
Индекс по умолчанию равен 0, хотя.
Я бы рекомендовал всегда передавать словарь списков конструктору dataframe при создании кадров данных. Это легче читать для других разработчиков. У Pandas много предостережений, не заставляйте других разработчиков обращаться к экспертам во всех из них, чтобы прочитать ваш код.