如何更改DataFrame的整个值?

时间:2019-05-30 05:27:06

标签: python 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 (自身,名称,值)

     

AttributeError:无法设置属性

我的意思是我可以用其中的值重新创建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

3 个答案:

答案 0 :(得分:2)

使用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

答案 1 :(得分:1)

尝试一下:

>>> 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

答案 2 :(得分:1)

option