Pandas直接读取arff格式的文件

作者:小小明

之前有位群友遇到了arff格式的数据,却不知道怎么读取:

image-20210119005646208

然后我让这位群友把文件发我,给我分析一下,我用文件编辑器打开后,发现格式如下:

image-20210119010137692

只是一个文本文本而已,解析文本文件我实在太擅长了。可以看到:

  • 编码是utf-8
  • 列名都在以@attribute开头的行
  • 数据在@data的后面的部分

理解了这三点,我马上就能用pandas直接读取它,下面看看代码:

import pandas as pd

with open("adult_census_19210979.arff", encoding="utf-8") as f:
    header = []
    for line in f:
        if line.startswith("@attribute"):
            header.append(line.split()[1])
        elif line.startswith("@data"):
            break
    df = pd.read_csv(f, header=None)
    df.columns = header
df

结果:

image-20210119010657950

为了后续使用方便,我们可以将上面的代码封装成函数:

def read_arrf(file):
    with open(file, encoding="utf-8") as f:
        header = []
        for line in f:
            if line.startswith("@attribute"):
                header.append(line.split()[1])
            elif line.startswith("@data"):
                break
        df = pd.read_csv(f, header=None)
        df.columns = header
    return df

这样,读取任何arrf文件都方便,只需要直接传入即可:

read_arrf("adult_census_19210979.arff")

然后我得到了:

image-20210119012055657

image-20210119011024820

猜你喜欢

转载自blog.csdn.net/as604049322/article/details/112798246
今日推荐