Как изменить все значения DataFrame?

При первой попытке я хочу создать DataFrame, но забыл указать некоторые значения:

a=[0,1/4,2/4,3/4,4]
b=[0,1/4,2/4,3/4,4]
z=DataFrame(index=a,columns=b)

Тогда я получил это.

>      0.00 0.25 0.50 0.75 4.00
> 0.00  NaN  NaN  NaN  NaN  NaN
> 0.25  NaN  NaN  NaN  NaN  NaN
> 0.50  NaN  NaN  NaN  NaN  NaN
> 0.75  NaN  NaN  NaN  NaN  NaN
> 4.00  NaN  NaN  NaN  NaN  NaN

Я хочу заменить все значения на np.arange(25).reshape(5,5)

Затем я попробовал это:

z.values=np.arange(25).reshape(5,5)

Результат:

object.setattr(self, name, value)

AttributeError: can't set attribute

Я имею в виду, что я мог бы воссоздать DataFrame со значениями в нем, но это кажется очень .... (не знаю, как сказать).

Вопрос:

1/Почему я не могу этого сделать?

2/Как это решить?

3/При условии, что я хочу, чтобы каждое значение z.values было результатом умножения столбцов и строк (строки * столбцы). Как мне это сделать ?

Ожидаемый результат 3/

     0.00    0.25   0.50    0.75 4.00
0.00    0       0      0       0    0
0.25    0  0.0625  0.125  0.1875    1
0.50    0   0.125   0.25   0.375    2
0.75    0  0.1875  0.375  0.5625    3
4.00    0       1      2       3   16

Какой результат вы ожидаете? Пожалуйста, дайте мне знать. Кстати, что вы подразумеваете под своим третьим пунктом?

Amazing Things Around You 30.05.2019 07:34

@Amazing Things Around You значения (строка * столбцы). приятель !

Chau Loi 30.05.2019 07:38

Но вы показали это: np.arange(25).reshape(5,5)

Amazing Things Around You 30.05.2019 07:39

Я знаю, я имею в виду, на всякий случай, как я могу сделать это легко?

Chau Loi 30.05.2019 07:45

Вы имели в виду что-то вроде того, что я обновил в ответе?

Amazing Things Around You 30.05.2019 07:50

Абсолютно, спасибо дружище!

Chau Loi 30.05.2019 07:51

Вы можете принять ответ, если он сработал

Amazing Things Around You 30.05.2019 07:51

Давайте продолжить обсуждение в чате.

Chau Loi 30.05.2019 07:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
8
47
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуй это:

>>> import pandas as pd
>>> df = pd.DataFrame(np.arange(25).reshape(5,5))
>>> df
    0   1   2   3   4
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14
3  15  16  17  18  19
4  20  21  22  23  24
>>> a=[0,1/4,2/4,3/4,4]
>>> b=[0,1/4,2/4,3/4,4]
>>> df.columns = a
>>> df.index = b
>>> df
      0.00  0.25  0.50  0.75  4.00
0.00     0     1     2     3     4
0.25     5     6     7     8     9
0.50    10    11    12    13    14
0.75    15    16    17    18    19
4.00    20    21    22    23    24

ОБНОВЛЕНО
Немного легкого:

>>> df = pd.DataFrame(np.arange(25).reshape(5,5),index=a,columns=b)
>>> df
      0.00  0.25  0.50  0.75  4.00
0.00     0     1     2     3     4
0.25     5     6     7     8     9
0.50    10    11    12    13    14
0.75    15    16    17    18    19
4.00    20    21    22    23    24

Если я сначала создам DataFrame без значений, могу ли я добавить к нему значения позже, как я просил? @Удивительные вещи вокруг вас

Chau Loi 30.05.2019 07:34

Итак, вы хотите сначала создать фрейм данных. Но вы должны помнить об индексе, а затем заполнять в нем соответствующие значения. Позвольте мне редактировать

Amazing Things Around You 30.05.2019 07:38
Ответ принят как подходящий

Используйте pd.DataFrame.where один из способов:

import numpy as np
import pandas as pd

a=[0,1/4,2/4,3/4,4]
b=[0,1/4,2/4,3/4,4]
z=pd.DataFrame(index=a,columns=b)

z.where(pd.notna,np.arange(25).reshape(5,5))

Выход:

     0.00 0.25 0.50 0.75 4.00
0.00    0    1    2    3    4
0.25    5    6    7    8    9
0.50   10   11   12   13   14
0.75   15   16   17   18   19
4.00   20   21   22   23   24

Для последнего используйте np.matmul:

mat = np.matmul(np.reshape(z.index, (-1,1)), np.reshape(z.columns, (1,-1)))
z.where(pd.notna, mat)

Выход:

     0.00    0.25   0.50    0.75 4.00
0.00    0       0      0       0    0
0.25    0  0.0625  0.125  0.1875    1
0.50    0   0.125   0.25   0.375    2
0.75    0  0.1875  0.375  0.5625    3
4.00    0       1      2       3   16
>>> z
     0.00 0.25 0.50 0.75 4.00
0.00  NaN  NaN  NaN  NaN  NaN
0.25  NaN  NaN  NaN  NaN  NaN
0.50  NaN  NaN  NaN  NaN  NaN
0.75  NaN  NaN  NaN  NaN  NaN
4.00  NaN  NaN  NaN  NaN  NaN
>>> def cross_mul(x):
...     return x.index * x.name
... 
>>> z.apply(cross_mul)
      0.00    0.25   0.50    0.75  4.00
0.00   0.0  0.0000  0.000  0.0000   0.0
0.25   0.0  0.0625  0.125  0.1875   1.0
0.50   0.0  0.1250  0.250  0.3750   2.0
0.75   0.0  0.1875  0.375  0.5625   3.0
4.00   0.0  1.0000  2.000  3.0000  16.0
>>> z.apply(lambda x: x.index * x.name) // One Liner

Спасибо, @ChauLoi. Если вы сочтете это полезным, пожалуйста, примите мой ответ, нажав на галочку.

Vishnudev 02.06.2019 15:26

Другие вопросы по теме