Python numpy数组转换后如何恢复数据帧行名和列名

Python numpy数组转换后如何恢复数据帧行名和列名,python,pandas,numpy,Python,Pandas,Numpy,我有以下数据框: import numpy as np import pandas as pd x = [1.1,2.1,0.5] y = [0.1,3.4,7] gn = ['foo','bar','qux'] df = pd.DataFrame({'gn':gn, 'x':x, 'y':y}) df 这就产生了: In [148]: df Out[148]: gn x y 0 foo 1.1 0.1 1 bar 2.1 3.4 2 qux 0.5 7

我有以下数据框:

import numpy as np
import pandas as pd

x = [1.1,2.1,0.5]
y = [0.1,3.4,7]
gn = ['foo','bar','qux']
df = pd.DataFrame({'gn':gn, 'x':x, 'y':y})
df
这就产生了:

In [148]: df
Out[148]:
    gn    x    y
0  foo  1.1  0.1
1  bar  2.1  3.4
2  qux  0.5  7.0
然后我在转换为numpy ndarray后进行一些转换:

df.set_index("gn",inplace=True)
npar = df.as_matrix()
npar_new = npar + 1
npar_new
这就产生了:

array([[ 2.1,  1.1],
       [ 3.1,  4.4],
       [ 1.5,  8. ]])
我的问题是如何将列和行名称(gn)从
df
恢复到
npar\u new
。预期的最终结果是:

   gn    x    y
  foo  2.1  1.1
  bar  3.1  4.4
  qux  1.5  8.0
你可以试试

df_new = pd.DataFrame(npar_new, index = df.index, columns = df.columns)


    x   y
gn      
foo 2.1 1.1
bar 3.1 4.4
qux 1.5 8.0

我很难理解为什么要首先进行数组转换。这是授权吗?如果不是的话,这里有一个纯粹的熊猫版本,可以一次完成所有操作-

df = df + 1
因此,完整代码将为-

import numpy as np
import pandas as pd

x = [1.1,2.1,0.5]
y = [0.1,3.4,7]
gn = ['foo','bar','qux']
df = pd.DataFrame({'gn':gn, 'x':x, 'y':y})
df = df + 1

通过使用
.loc
分配值

df.loc[:,['x','y']]=ary
df
Out[849]: 
    gn    x    y
0  foo  2.1  1.1
1  bar  3.1  4.4
2  qux  1.5  8.0
更多信息

ary=np.array([[ 2.1,  1.1],
       [ 3.1,  4.4],
       [ 1.5,  8. ]])
因为你有更多的专栏

df.loc[:,list(df.set_index("gn"))]=ary

我的op只是一个例子。实际上,
npar\u new
来自一个非常复杂的过程,它只输出
np.ndarray
。谢谢。但是显式声明
x
y
有点麻烦。因为实际上,列名很多。