【问题标题】:DataFrame correlation produces NaN although its values are all integersDataFrame 相关产生 NaN,尽管它的值都是整数
【发布时间】:2014-05-04 12:58:30
【问题描述】:

我有一个数据框df:

df   = pandas.DataFrame(pd.read_csv(loggerfile, header = 2))

values = df.as_matrix()

df2 = pd.DataFrame.from_records(values, index = datetimeIdx, columns = Columns) 

编辑:

现在按照建议以这种方式读取数据:

df2 = pd.read_csv(loggerfile, header = None, skiprows = [0,1,2])

示例:

                         0              1       2   3   4   5   6   7   8   \
0  2014-03-19T12:44:32.695Z  1395233072695  703425   0   2   1  13   5  21   
1  2014-03-19T12:44:32.727Z  1395233072727  703425   0   2   1  13   5  21   

   9   10  11   12  13   14  15  16  
0  25   0  25  209   0  145   0   0  
1  25   0  25  209   0  146   0   0

这些列都是 int 类型(除了第一个):

print df2.dtypes

0     object
1      int64
2      int64
3      int64
4      int64
5      int64
6      int64
7      int64
8      int64
9      int64
10     int64
11     int64
12     int64
13     int64
14     int64
15     int64
16     int64

但在我的相关性中,有些列似乎是 NaN。

df2.corr()

     1          2    3          4           5   6   7            8           ...    
1    1.000000   NaN  0.018752   -0.550307   NaN NaN 0.075191     0.775725
2    NaN        NaN  NaN         NaN        NaN NaN NaN          NaN
3    0.018752   NaN  1.000000   -0.067293   NaN NaN -0.579651    0.004593 
...

【问题讨论】:

  • 您能提供更多数据吗?因为你在一列中有很多相同的值,所以你得到 NaN 的相关性是合乎逻辑的
  • 那些列的值现在没有变化,是的...

标签: python pandas nan correlation series


【解决方案1】:

这些列的值现在不会改变,是的

正如 Joris 指出的那样,如果值不变,您会期望 NaN。要了解为什么要查看相关公式:

cor(i,j) = cov(i,j)/[stdev(i)*stdev(j)]

如果第 i 个或第 j 个变量的值不变,则相应的标准差为零,分数的分母也为零。因此,相关性将是NaN

【讨论】:

    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 2018-02-22
    • 2016-02-12
    • 2019-12-07
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多