如何解决熊猫数据帧上的numpy.corrcoef中的“不受支持的操作数类型”错误
我一直在尝试使用numpy
获取数据帧之间的相关性,但是我陷入了错误:
+不支持的操作数类型:“ float”和“ str”
我的代码是否有错误,或者我应该添加什么?谢谢
import pandas as pd
usd = pd.read_csv("data_usd.csv")
emas = pd.read_csv("emas_.csv")
minyak = pd.read_csv("minyak_brent.csv")
sawit = pd.read_csv("sawit.csv")
kcl = pd.read_csv("kcl.csv")
fosfat = pd.read_csv("fosfat.csv")
df1 = pd.DataFrame(usd)
df2 = pd.DataFrame(emas)
df3 = pd.DataFrame(minyak)
df4 = pd.DataFrame(sawit)
df5 = pd.DataFrame(kcl)
df6 = pd.DataFrame(fosfat)
df_col = pd.concat([df1,df2,df3,df4,df5,df6],axis=1)
df_col.columns
df_col = df_col.set_index('month')
df_col.head()
import numpy as np
np.corrcoef(df_col)
解决方法
没有看到数据框,似乎您有包含字符串的列,而不仅仅是数字。当您要将数字数组与数组字符串相关联时,np.corrcoef
不知道该怎么办。
样本数据(请注意,列D包含将转换为适当数字dtype的数字字符串)
df = pd.DataFrame(
{"A": [1,2,3,4,5],"B":[2,9,21,30,100],"C":list("abcde"),"D": ["1","2","3","4","5"]}
)
print(df.dtypes)
A int64
B int64
C object
D object
dtype: object
print(df)
A B C D
0 1 2 a 1
1 2 9 b 2
2 3 21 c 3
3 4 30 d 4
4 5 100 e 5
如有可能,将列转换为数字:
df = df.apply(pd.to_numeric,errors="ignore")
print(df.dtypes)
A int64
B int64
C object
D int64
dtype: object
在数字列上使用np.corrcoef
。
np.corrcoef(df.select_dtypes("number"),rowvar=False)
array([[1.,0.87309983,1. ],[0.87309983,1.,0.87309983],[1.,1. ]])
或者,如果您知道列都是其预期的dtype。您可以只使用DataFrame.corr()
方法,而不必像使用np.corrcoef
df.corr()
A B D
A 1.0000 0.8731 1.0000
B 0.8731 1.0000 0.8731
D 1.0000 0.8731 1.0000
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。