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

Python pandas正确导入逗号加空格分隔txt数据的方法

问题根源

两个核心问题导致你导入和计算异常:

  1. 分隔符匹配逻辑错误:你的数据以逗号加不定长空格作为字段分隔,你之前写的固定长度空格匹配规则sep=" "/sep=", "无法适配长度不固定的空格,自然会触发报错;不指定sep时pandas默认仅用逗号切分,会把数值前后的空格一并读入,导致数值列被识别为字符串(object类型),字符串类型无法计算皮尔逊相关系数,最终只会输出1.0和NaN的无效结果。
  2. 现有代码存在语法问题:df.dropna没有加括号也没有重新赋值,根本不会执行空值删除操作;多余导入的tkinter.ttk.Separator和当前数据处理逻辑完全无关,可以删掉。
正确导入方案

pandas.read_csv的sep参数支持传入正则表达式,你只需要指定sep=r',\s*'即可匹配「逗号+0到任意个空白字符」的分隔规则,自动清理字段前后的多余空格,正确识别数值类型。
额外注意:你读取的是KNMI的etmgeg系列日值气象数据,文件开头默认有几十行带#的注释说明行,需要加skiprows参数跳过这些行,否则会把注释内容读入为数据行。

修正后代码
import pandas as pd

# 读取数据
df = pd.read_csv(
    "etmgeg_235.txt",
    sep=r",\s*", # 正则匹配逗号+任意数量空格的分隔格式
    skiprows=50, # 跳过开头注释行,数值可根据自己文件开头#号的实际行数调整
    engine="python", # 使用正则分隔符时需要指定python解析引擎
    na_values=["     "] # 可选,明确指定全空格的字段识别为空值
)

# 有效删除空值
df = df.dropna()

# 计算相关系数矩阵,pandas新版本需要加numeric_only=True排除非数值列
cr = df.corr(numeric_only=True)
print(cr)
校验方式

导入完成后先执行print(df.dtypes),如果所有气象数值字段的类型为int64或float64而非object,说明分隔符设置正确,此时计算出的相关系数矩阵就是正常结果。

内容的提问来源于stack exchange,提问作者Scott van Duin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:30:57