将pandas df转换为np数组时如何保留列名?

时间:2016-09-27 17:20:44

标签: arrays pandas numpy

我需要将pandas df转换为np数组,但是我在这个过程中丢失了列名。我已经阅读并用Google搜索了一段时间而且我被卡住了。

我的df看起来像这样:

mont_data.tail()
Out[114]: 
Index        MOEX.ME     ^GSPC      ^MXX     ^N225    ^OSEAX
Date                                                        
2016-05-31  0.001482 -0.004077  0.002506 -0.000005  0.033240
2016-06-30  0.074850  0.008136 -0.002262 -0.029029  0.002518
2016-07-31  0.025882  0.030147  0.024242  0.007169  0.032473
2016-08-31  0.059069  0.014333  0.025050  0.025243 -0.008767
2016-09-30  0.035201 -0.009029 -0.016499 -0.039833 -0.003520
然后我做了:

mont_arr = mont_data.as_matrix(columns=[mont_data.columns[0:5]])

或:

mont_arr = mont_data.as_matrix(columns=[mont_data.columns[0:]])

两者都会产生没有列标题的np数组。不知道怎么解决这个问题?

在Python 3.5中使用最新版本的软件包

2 个答案:

答案 0 :(得分:3)

您可以计算pandas中列之间的相关系数。

import io
import pandas as pd

data = io.StringIO('''\
Index        MOEX.ME     ^GSPC      ^MXX     ^N225    ^OSEAX
2016-05-31  0.001482 -0.004077  0.002506 -0.000005  0.033240
2016-06-30  0.074850  0.008136 -0.002262 -0.029029  0.002518
2016-07-31  0.025882  0.030147  0.024242  0.007169  0.032473
2016-08-31  0.059069  0.014333  0.025050  0.025243 -0.008767
2016-09-30  0.035201 -0.009029 -0.016499 -0.039833 -0.003520
''')
mont_data = pd.read_csv(data, delim_whitespace=True).set_index('Date')

print(mont_data.corr())

输出:

          MOEX.ME     ^GSPC      ^MXX     ^N225    ^OSEAX
MOEX.ME  1.000000  0.201809  0.030481 -0.152252 -0.762061
^GSPC    0.201809  1.000000  0.853232  0.595998  0.261402
^MXX     0.030481  0.853232  1.000000  0.926106  0.231001
^N225   -0.152252  0.595998  0.926106  1.000000  0.225621
^OSEAX  -0.762061  0.261402  0.231001  0.225621  1.000000

答案 1 :(得分:2)

你可以这样做:

In [19]: df
Out[19]:
             MOEX.ME     ^GSPC      ^MXX     ^N225    ^OSEAX
Date
2016-05-31  0.001482 -0.004077  0.002506 -0.000005  0.033240
2016-06-30  0.074850  0.008136 -0.002262 -0.029029  0.002518
2016-07-31  0.025882  0.030147  0.024242  0.007169  0.032473
2016-08-31  0.059069  0.014333  0.025050  0.025243 -0.008767
2016-09-30  0.035201 -0.009029 -0.016499 -0.039833 -0.003520

In [23]: result = pd.DataFrame(np.corrcoef(df), index=df.columns, columns=df.columns)

In [24]: result
Out[24]:
          MOEX.ME     ^GSPC      ^MXX     ^N225    ^OSEAX
MOEX.ME  1.000000 -0.087534  0.433865 -0.651299  0.093799
^GSPC   -0.087534  1.000000  0.457119  0.657940  0.980054
^MXX     0.433865  0.457119  1.000000 -0.299503  0.596537
^N225   -0.651299  0.657940 -0.299503  1.000000  0.501435
^OSEAX   0.093799  0.980054  0.596537  0.501435  1.000000