第一次尝试时,我想创建一个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
答案 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