You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于State列计算Avg_speed与Death_rate相关性遇空DataFrame问题咨询

解决按State计算Avg Speed与Death Rate相关性返回空DataFrame的问题

嘿,我来帮你梳理下问题出在哪,以及怎么解决:

问题根源分析

你现在的代码返回空DataFrame,主要有两个核心原因:

  1. 数据读取逻辑错误:你用了header=None,这会把CSV里的表头行(就是state death_rate avg_speed那一行)当成普通数据行处理,再加上usecols=[1,2]只取后两列,导致读取到的数据混进了字符串类型的表头值,pandas没法正常计算数值相关性。
  2. 缺少分组计算逻辑:你想要的是按每个state单独计算两列的相关性,但现有代码直接对整个数据集做了corr,完全没用到state列的分组功能。

修正后的完整代码

第一步:正确读取数据

先确保读取到正确的列和表头:

import pandas as pd
import numpy as np

# 读取CSV,指定需要的列,让pandas自动识别第一行为表头
dataset = pd.read_csv('result.csv', usecols=['state', 'death_rate', 'avg_speed'])

第二步:按State分组计算相关性

我们用groupby结合自定义函数,对每个state的子数据集单独计算相关性:

# 定义计算单组相关性的函数
def get_group_corr(group):
    # 计算avg_speed和death_rate的皮尔逊相关系数
    corr_value = group['avg_speed'].corr(group['death_rate'])
    # 返回结构化结果,方便后续合并成DataFrame
    return pd.Series({'correlation': corr_value})

# 按state分组,应用函数计算每个组的相关性
result = dataset.groupby('state').apply(get_group_corr).reset_index()

第三步:美观展示结果

现在result是包含每个state对应相关性的DataFrame,你可以用几种方式展示:

  1. 直接打印基础结果:
print(result)

输出示例:

state correlation
0 AL (对应相关系数值)
1 AK (对应相关系数值)
...

  1. 格式化打印(保留4位小数):
print(result.style.format({'correlation': '{:.4f}'}))
  1. 可视化展示(柱状图):
    如果想更直观看到每个state的相关性差异,可以用matplotlib绘图:
import matplotlib.pyplot as plt

result.plot(kind='bar', x='state', y='correlation', figsize=(10,6), title='Correlation between Avg Speed and Death Rate by State')
plt.ylabel('Pearson Correlation Coefficient')
plt.show()

补充说明

皮尔逊相关系数的范围是[-1,1]:

  • 接近1:表示两列数据正相关(avg_speed越高,death_rate越高)
  • 接近-1:表示负相关(avg_speed越高,death_rate越低)
  • 接近0:表示几乎没有线性相关性

内容的提问来源于stack exchange,提问作者saad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:07:02