我想从数据框中获取两列的相关系数:df['a'] 和 df['b'] 大约有 15 或 20 行数据。
我将它们分配给“col1”和“col2”并尝试调用 corr 方法:
col1 = df['a']
col2 = df['b']
corr = col1.corr(col2,method="pearson")
Run Code Online (Sandbox Code Playgroud)
我收到错误:“float”对象没有属性“shape”
如果我导入统计库并尝试:
corr, pval=stats.pearsonr(col1,col2)
Run Code Online (Sandbox Code Playgroud)
我得到一个相关系数。那么我在第一件事上做错了什么?
在回答其中一条评论时,我检查了 col1 和 col2 的类型,它们都是系列。我认为这会起作用,因为我转到了文档中的此链接: https: //pandas.pydata.org/docs/reference/api/pandas.Series.corr.html 这没有表明您需要指定这是一个系列而不是数据框。
我还检查了完整数据框的类型:
print(type(df))
Run Code Online (Sandbox Code Playgroud)
它以 dataframe 类型返回。完整的 dataframe 有 21 列,带有索引。我只想获得其中两列的相关系数。这是打印 col1 和 col2 时得到的数据子集:
col1:
Country
Indonesia 9.3659e-05
Japan 0.000388417
Canada 0.001638514
...
Name: a, dtype: object
col2:
国家
印度尼西亚 65
日本 194
加拿大 167
...
名称:b,dtype:对象
是国家/地区的索引导致了问题吗?
要么df是一个系列:
>>> df
a 10.0
b 12.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)
或者数据帧的列类型错误:
>>> df
a b
0 10.0 20.0
1 12.0 22.0
>>> df.dtypes
a float64
b object
dtype: object
Run Code Online (Sandbox Code Playgroud)