两列相对于固定柱的相关性

2024-06-16 12:22:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据集有3列(状态、死亡率、平均速度)

我想找出平均速度和死亡率之间的关系

我试过了,但它返回了一个空的数据帧

import pandas as pd
import numpy as np
dataset = pd.read_csv('result.csv', header=None, usecols=[1,2]) #read 
result = dataset.corr()
print result

如何表示结果?在

编辑:

这是样本数据

^{pr2}$

Tags: csv数据importnumpypandasread关系状态
2条回答

这里有几个不同的问题。。。在

您提供的数据示例不允许计算每个状态的相关性,因为每个状态只有1行。所以我稍微修改了一下您的数据示例,这样下面的示例就可以工作了。我假设在你的实际数据文件中,每个状态有多行。以下是我的工作:

state    death_rate     avg_speed
AL         50          43.08966565
AL         42          12.16736296
AL         52          43.33464079
CA         28          36.88461538
CA         30          48.74048562
CA         28          27.54417671
CA         26          23.10909091
FL         18          58.58169492
FL         86          43.55456453
AL         95          66.83672039
AL         99          30.63928113
FL         98          25.06262626

正如一些注释中提到的,您不应该使用header=None,因为您的数据文件确实包含一个标题行。此外,您需要导入所有列,而不是仅将其限制为2列,因此应该省略usecols=[1,2]

您的输入数据似乎是用空格分隔的,因此您需要使用delim_whitespace来正确导入它。这将使您能够正确地将数据导入到数据帧中

^{pr2}$

要分别计算每个状态的death_rateavg_speed之间的相关性,需要在使用corr()之前使用groupby。而且,corr()会给你一个相关矩阵,但是我猜你只需要每个状态的一个相关值。我们可以通过在计算相关矩阵后整理数据帧来得到这个结果

首先,我们按state分组并计算相关矩阵:

result = df.groupby('state').corr()

                  avg_speed  death_rate
state                                  
AL    avg_speed    1.000000    0.482542
      death_rate   0.482542    1.000000
CA    avg_speed    1.000000    0.922646
      death_rate   0.922646    1.000000
FL    avg_speed    1.000000   -0.903176
      death_rate  -0.903176    1.000000

然后我们重置索引并拉出state和其他列之一(另一列只包含重复的信息,因为您只处理2个变量):

result = result.reset_index()[['state', 'avg_speed']]

  state  avg_speed
0    AL   1.000000
1    AL   0.482542
2    CA   1.000000
3    CA   0.922646
4    FL   1.000000
5    FL  -0.903176

最后,删除相关性为1的行,并选择将该列重命名为更合理的名称:

result = result[~result['avg_speed'].eq(1)].rename(columns={'avg_speed': 'corr'})

这会给你:

  state      corr
1    AL  0.482542
3    CA  0.922646
5    FL -0.903176

@本吉说得不错。根据您的示例数据,实际上有几个问题:

  1. header不应设置为None,因为您确实有一个标头
  2. 您可能需要根据您的数据适当地设置sep或{}。您提供的示例数据似乎不是标准格式。我尝试了空格和制表符(\t),但都没有用。在

您可以尝试打印dataset或致电dataset.columns检查是否正确阅读了该文件。在

相关问题 更多 >