Python pandas 返回空的相关性矩阵
我正在使用 Python 2.7.6 和 pandas 0.13.1。我无法从一个数据框(DataFrame)中计算出相关性矩阵,不太清楚为什么。这里是我的示例数据框(foo
):
A B C
2011-10-12 0.006204908 -0.0009503677 0.003480105
2011-10-13 0.00234903 -0.0005122284 -0.001738786
2011-10-14 0.01045599 0.000346268 0.002378351
2011-10-17 0.003239088 0.001246239 -0.002651856
2011-10-18 0.001717674 -0.0001738079 0.002013923
2011-10-19 0.0001919342 6.399505e-05 -0.001311259
2011-10-20 0.0007430615 0.001186141 0.001919222
2011-10-21 -0.01075129 -0.0015123 0.000807017
2011-10-24 -0.00819597 -0.0005124197 0.003037654
2011-10-25 -0.01604287 0.001157013 -0.001227516
现在我尝试计算相关性:
In [27]: foo.corr()
Out[27]:
Empty DataFrame
Columns: []
Index: []
[0 rows x 0 columns]
另一方面,我可以计算每一列与其他列之间的相关性。例如:
foo['A'].corr(foo['B'])
# 0.048578514633405255
有没有人知道这可能是什么原因导致的问题?
2 个回答
2
从pandas 1.5.0版本开始,corr()
函数新增了一个叫numeric_only=
的参数。如果数据框中的值可以安全地转换为浮点数,也就是说,如果用df.astype(float)
不会出现错误,那么将numeric_only=False
设置后,corr()
函数就可以处理对象、字符串和小数类型的数据了。
df.corr(numeric_only=False)
举个例子:
from decimal import Decimal
df = pd.DataFrame({
'A': ['0.006204908', '0.00234903', '0.01045599', '0.001717674'],
'B': [Decimal('-0.07'), Decimal('-0.04'), Decimal('0.08'), Decimal('-0.07')],
'C': ['0.003480105', '-0.001738786', '0.002378351', '-0.002651856']})
# pandas < 1.5.0
df.corr()
Empty DataFrame
Columns: []
Index: []
# pandas >= 1.5.0
df.corr(numeric_only=False)
A B C
A 1.000000 0.816457 0.827324
B 0.816457 1.000000 0.369191
C 0.827324 0.369191 1.000000
77
正如杰夫在评论中提到的,问题出在我的列数据类型是object
。为了以后避免这种情况,即使看起来像数字,也要检查一下数据类型,确保它是数字类型(比如可以用foo.astype(float)
来转换)再计算相关性矩阵。