Python: добавление значения к фрейму данных - PullRequest
0 голосов
/ 05 августа 2020

Итак, очевидно, я пытаюсь объявить пустой фрейм данных, а затем присвоить ему некоторые значения

df = pd.DataFrame()
df["a"] = 1234
df["b"] = b # Already defined earlier
df["c"] = c # Already defined earlier
df["t"] = df["b"]/df["c"]

Я получаю следующий результат:

Empty DataFrame
Columns: [a, b, c, t]
Index: []

Кто-нибудь может объяснить, почему я Я получаю этот пустой фрейм данных, даже когда назначаю значения. Извините, если у меня вопрос типа basi c

Ответы [ 4 ]

3 голосов
/ 05 августа 2020

Просто добавьте эти значения в виде списка, например:

df["a"] = [123]
3 голосов
/ 05 августа 2020

Я думаю, вам нужно инициализировать DataFrame вот так.

df = pd.DataFrame(data=[[1234, b, c, b/c]], columns=list("abct"))

Когда вы создаете DataFrame без начальных данных, DataFrame не имеет данных и столбцов. Я думаю, вы не можете добавлять какие-либо данные.

1 голос
/ 05 августа 2020

Вы начали с инициализации пустого DataFrame:

# Initialising an empty dataframe
df = pd.DataFrame()

# Print the DataFrame
print(df)
  • Результат Пустой фрейм данных Столбцы: [] Индекс: []

Далее вы создали столбец внутри пустого DataFrame:

df["a"] = 1234
print(df)
  • Результат Пустой фрейм данных Столбцы: [a] Индекс: []

Но вы никогда не добавляли значения в существующий столбец «a» - например, с помощью словаря (ключ: «a» и список значений [1, 2, 3, 4]:

df = pd.DataFrame({"a":[1, 2, 3, 4]})
print(df)

В случае добавления списка значений каждое значение получит запись индекса.

0 голосов
/ 05 августа 2020

Проблема в том, что ячейке в таблице требуется как значение индекса строки, так и значение индекса столбца для вставки значения ячейки. Итак, вам нужно решить, являются ли «a», «b», «c» и «t» столбцами или индексами строк.

Если они являются индексами столбцов, тогда вам понадобится индекс строки ( 0 в приведенном ниже примере) вместе с тем, что вы написали выше:

df = pd.DataFrame()
df.loc[0, "a"] = 1234
df.loc[0, "b"] = 2 
df.loc[0, "c"] = 3

Результат:

In : df
Out:
        a    b    c
0  1234.0  2.0  3.0

Теперь, когда у вас есть данные в фрейме данных, вы можете выполнять операции со столбцами (т. Е. создайте новый столбец «t» и для каждой строки присвойте значение соответствующего элемента в столбце «b», разделенное на соответствующие элементы в столбце «c»):

df["t"] = df["b"]/df["c"]

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

df = pd.DataFrame()
df.loc[0, "a"] = 1234
df.loc[1, "b"] = 2 
df.loc[2, "c"] = 3

Результат:

In : df
Out:
        a    b    c
0  1234.0  NaN  NaN
1     NaN  2.0  NaN
2     NaN  NaN  3.0

Но, как вы можете видеть, ячейки, в которых вы не указали кортеж (строка, столбец, значение) теперь NaN. Это означает, что если вы попробуете df["b"]/df["c"], вы получите значения NaN, поскольку вы пытаетесь выполнить линейную операцию со значением NaN.

In : df["b"]/df["c"]
Out:
0   NaN
1   NaN
2   NaN
dtype: float64

Обратное, если вы хотите вставить элементы в один столбец. Теперь для этого вам понадобится заголовок столбца (0 ниже):

df = pd.DataFrame()
df.loc["a", 0] = 1234
df.loc["b", 0] = 2 
df.loc["c", 0] = 3

Результат:

In : df
Out:
        0
a  1234.0
b     2.0
c     3.0

Теперь, вставив значение для «t», вам понадобится чтобы точно указать, какие ячейки вы имеете в виду (обратите внимание, что pandas не будет выполнять операции векторизованных строк так же, как операции векторизованных столбцов).

df.loc["t", 0] = df.loc["b", 0]/df.loc["c", 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...