8

Создание DataFrame из значений переменных вызывает ошибку "ValueError: If using all scalar values, you must pass an index"

4

У меня есть две переменные, определенные следующим образом:

a = 2
b = 3

Я хочу создать DataFrame из этих переменных:

df2 = pd.DataFrame({'A': a, 'B': b})

Однако при выполнении этого кода возникает ошибка:

ValueError: If using all scalar values, you must pass an index

Я также попробовал следующий вариант:

df2 = (pd.DataFrame({'a': a, 'b': b})).reset_index()

Но это приводит к тому же сообщению об ошибке. Как мне правильно создать DataFrame из этих переменных?

5 ответ(ов)

12

Сообщение об ошибке указывает на то, что если вы передаете скалярные значения, необходимо также указать индекс. У вас есть два варианта решения данной проблемы.

Первый вариант — не использовать скалярные значения для колонок, а вместо этого использовать списки:

>>> df = pd.DataFrame({'A': [a], 'B': [b]})
>>> df
   A  B
0  2  3

Второй вариант — использовать скалярные значения и указать индекс:

>>> df = pd.DataFrame({'A': a, 'B': b}, index=[0, 3])
>>> df
   A  B
0  2  3
3  2  3

Таким образом, вы можете выбрать подходящий для вас способ в зависимости от требований вашего кода.

2

Вы можете попробовать обернуть ваш словарь в список:

my_dict = {'A': 1, 'B': 2}
pd.DataFrame([my_dict])

Это создаст DataFrame, который будет выглядеть следующим образом:

   A  B
0  1  2
1

Вы также можете использовать pd.DataFrame.from_records, что будет более удобно, если у вас уже есть словарь:

df = pd.DataFrame.from_records([{ 'A': a, 'B': b }])

Кроме того, вы можете установить индекс, если это необходимо, используя следующий код:

df = pd.DataFrame.from_records([{ 'A': a, 'B': b }], index='A')
0

Вам сначала нужно создать объект Series в pandas. Вторым шагом будет преобразование этой Series в DataFrame.

Вот пример кода:

import pandas as pd

data = {'a': 1, 'b': 2}
pd.Series(data).to_frame()

Вы также можете задать имя столбца:

pd.Series(data).to_frame('ColumnName')

Таким образом, вы создадите DataFrame с заданным именем столбца.

0

Когда вы работаете с Pandas, ошибка "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

Индекс обычно генерируется автоматически, если он не указан. Однако Pandas не знает, сколько строк с 2 и 3 вам нужно. Вы можете быть более явным в этом вопросе.

df2 = pd.DataFrame({'A': [a] * 4, 'B': [b] * 4})

# Вывод:
#     A   B
# 0   2   3
# 1   2   3
# 2   2   3
# 3   2   3

Обратите внимание, что по умолчанию индекс начинается с 0.

Рекомендуется всегда передавать словарь списков в конструктор DataFrame при создании датафреймов. Это делает код более читаемым для других разработчиков. Pandas имеет множество нюансов, и не следует требовать от других разработчиков быть экспертами во всех них, чтобы понять ваш код.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь