pandas中的cov和corr函数不能忽略含有字符串行的问题

作者处于新手修炼期,在今天学习pandas遇到了点小问题给大家分享一下

今天在学习cov和corr求协方差和相关性函数时查询相关函数资料,资料上说cov函数以及corr函数会忽略非数字的列,但是在实操TiTans训练数据时发现并不会忽略含有字符串的那一列数据,结果导致代码进行了报错

数据来源

kaggle入门竞赛Titans

下面是参考的网页资料

Python Pandas dataframe.cov()用法及代码示例 - 纯净天空 (vimsky.com)icon-default.png?t=N7T8https://vimsky.com/examples/usage/python-pandas-dataframe-cov.html

开始代码如下

df = pd.read_csv('C:\\Users\\24242\\Desktop\\AI_Reference\\data_bag\\titanic\\train.csv')
df.cov()

 Titans训练集含有的数据如下图所示

a0dfd2bc1b3b44cdba11e8da9237113e.png

 发现cov函数无法对Name列进行协方差的求解,同时也并不会忽略Name这一列以及图中其他非数字的列  

代码报错情况如下

eef40a0dcb504087a19c6365aced6831.png

1340e06eb17042308720e38c1c491ecb.png

解决方案如下

由于字符串无法参加计算,会导致程序报错,所以我们更加希望忽略包含字符串的列

使用DataFrame的select_dtypes方式选择只包含数值类型的类(include或者用exclude),然后再计算协同方差和相关性

numeric_columns = df.select_dtypes(include=['int','float']).columns
cov_true = df[numeric_columns].cov()
corr_true = df[numeric_columns].corr()
corr_true

include传入一个列表,包含需要进行计算的类型(此处我选择了只int和float类型)

下面是运行结果 

590597f6e1fb404da74cd5478d1917b3.png

23c42faa198e4c2ea00428a31ca02c40.png

 运行成功,问题基本得到了解决,但是没有包含Ticket字段。

不足的是并不知道为什么cov和corr为什么不能忽略非数字的列,作者猜测可能是因为版本问题,希望大佬们能给出一些建议。

再次更新于2023年11月30日星期四。

感谢网友的答疑,可是试试一下解决方案:

pandas2.0版本后,原来corr函数自动忽略字符串等非浮点数的特性被修改了,可以用.corr(method='pearson',numeric_only=True)忽略字符串。

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: Pandas的DataFrame.corr()函数用于计算DataFrame各列之间的相关系数。该函数返回一个矩阵,其包含每对列之间的相关系数。默认情况下,它使用Pearson相关系数计算,但可以通过method参数指定使用其他相关系数计算,如Spearman或Kendall。 示例: ``` import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}) print(df.corr()) ``` 输出: ``` A B C A 1.0 -1.0 -1.0 B -1.0 1.0 1.0 C -1.0 1.0 1.0 ``` 可以看出对于A,B,C三个字段之间的相关性. ### 回答2: Python pandas的DataFrame.corr()函数用于计算DataFrame对象的列之间的相关性。 该函数的语法如下: DataFrame.corr(method='pearson', min_periods=1) 参数说明: - method:相关性计算方法,可选值为'pearson'(默认)、'kendall'和'spearman'。 - 'pearson'表示使用皮尔逊相关系数衡量相关性,该系数是最常用的相关性度量,适用于线性相关的情况; - 'kendall'使用肯德尔相关系数衡量相关性,适合非线性但单调递增或递减的相关关系; - 'spearman'使用斯皮尔曼相关系数衡量相关性,也适用于非线性但单调递增或递减的相关关系。 - min_periods:计算相关系数所需的最小观测值数,即样本量,缺失值不计入样本量。 该函数会返回一个相关性矩阵,其和列分别表示DataFrame对象的列名,对角线元素为1,其余元素代表对应列之间的相关性。相关系数的取值范围为[-1, 1],其1表示完全正相关,-1表示完全负相关,0表示无相关性。 示例: ```python import pandas as pd # 创建样本数据 data = {'A': [1, 2, 3, 4, 5], 'B': [2, 4, 6, 8, 10], 'C': [3, 6, 9, 12, 15]} df = pd.DataFrame(data) # 计算相关性矩阵 corr_matrix = df.corr() print(corr_matrix) ``` 输出结果为: ``` A B C A 1.0 1.0 1.0 B 1.0 1.0 1.0 C 1.0 1.0 1.0 ``` ### 回答3: Pythonpandas库是数据分析领域使用广泛的工具包,它提供了强大的数据结构和数据分析函数。其的DataFrame是一种二维数据结构,类似于Excel表格,而corr函数是DataFrame对象的一个方法,用于计算不同列之间的相关性。 corr函数用法很简单,只需要将要计算相关性的列作为参数传入即可。具体来说,可以通过以下代码来使用corr函数: ```python import pandas as pd # 创建一个示例DataFrame data = {'Col1': [1, 2, 3, 4, 5], 'Col2': [2, 4, 6, 8, 10], 'Col3': [3, 6, 9, 12, 15]} df = pd.DataFrame(data) # 使用corr函数计算相关性 correlation_matrix = df.corr() print(correlation_matrix) ``` 上述代码创建了一个DataFrame对象df,包含了三列数据。然后使用df.corr()来计算了这三列之间的相关性,结果存储在correlation_matrix变量。最后,通过print函数将相关性矩阵打印出来。 输出结果会显示一个相关性矩阵,其每个单元格的值表示对应两列之间的相关性系数。相关性系数的取值范围为-1到1,可以用来衡量变量之间的线性相关程度。如果相关性系数为正数(接近1),则表示变量之间存在正相关;如果相关性系数为负数(接近-1),则表示变量之间存在负相关;如果相关性系数接近0,则表示变量之间基本没有线性相关性。 总结来说,pandascorr函数可以帮助我们快速计算DataFrame对象不同列之间的相关性,从而帮助我们分析和理解数据的特征。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值