Python数据分析与可视化

读取数据

  1. 含有逗号分隔符文件
  2. JSON文件
  3. 源文件

含有逗号分隔符文件

本节主要讲CSV类型的文件以及如何使用Pandas库来读取CSV文件。

  • CSV文件的简介
  • 用Pandas来读取CSV文件

CSV文件的简介
在机器学习中以逗号作为分隔符的文件很常见(CSV文件),这种类型的文件每一行都有数据,每行的数据元素之间通过通过逗号分隔,用Pandas可以很方便的读取这类文件。
用Pandas来读取CSV文件
这是详细的 [ 说明文档 ](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.read_csv.html) 在读取文件之前先了解一下三个参数

  • sep-指定分隔符,如果不指定默认值是’,'支持自定义分隔符。
  • header-指定作为整个数据集列名的行.如果数据集中没有列名,则需要设置header=None.对有表头的数据识别第一行作为header.
  • names-用于结果的列名列表,如果数据文件中没有列标题行,就需要执行header=None。
    如果CSV文件的格式比较好,那么参数采用默认值,就可以读取好。
    虽然在不用Pandas的情况下也可以读取CSV文件,但是CSV文件的格式通常很混乱,读取他们通常会遇到很多难以处理的问题,Pandas模块具有许多参数,我们可以更改这些参数以处理更复杂的CSV文件。
    用一段代码来说明
    import pandas as pd
    
    # 创建列名列表
    names = ['age', 'workclass', 'fnlwgt', 'education', 'educationnum', 'maritalstatus', 'occupation', 'relationship', 'race',
            'sex', 'capitalgain', 'capitalloss', 'hoursperweek', 'nativecountry', 'label']
    # 利用定义好的列名来读取数据
    df = pd.read_csv("data/adult.data", header=None, names=names)
                          
    print(df.head())

下面来解释一下代码,首先下载需要的数据( 数据下载地址
)进入到页面后点击Data
Folder,然后选择adult.data。下载好后,可以用Excel或者其他文本编辑器打开。可以看到每行的数据都是以逗号分隔开的,如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200724204559114.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NDA4OTM1,size_16,color_FFFFFF,t_70)
我们可以发现这个CSV文件没有列名。但是我们在第二行的代码中定义了列名,并把它传递给了names参数。在第三行代码中我们设置了header=None,这是由于,Pandas默认将第一行作为列名,这样设置后第一行就会作为正常数据进行展示。
数据读入后将转为Pandas的dataframe格式。
dataframe格式非常类似于数据矩阵,但他还有其他的特点。比如,我们可以获取指定名称的行和列,并且在每一列中可以存储不同的数据类型,比如某一列可以是整型,另外一列可以是文本型。
我们可以将dataframe格式看作是一张Excel数据表。例如,有一张工作表,这张表中一列是日期,另外一列是日期对应的温度。我就可以把这张表看作是dataframe格式.
通过调用head()函数,我们可以看到dataframe格式数据的前五行。在下一节“数据描述”中再详细讨论如何使用dataframe格式。
接下来,让我们看一下JSON文件的读取。

JSON文件

本节主要讲JSON类型的文件以及如何使用Pandas库来读取JSON文件。

  • JSON文件介绍
  • 读取JSON文件

JSON文件介绍
JSON (JavaScript Object
Notation)是一种流行的格式具有灵活的模式。人类也很容易读写。在网络上发送的许多数据都是以JSON传输的。下面JSON文件例子:

    {
        "glossary": {
            "title": "example glossary",
            "GlossDiv": {
                "title": "S",
                "GlossList": {
                    "GlossEntry": {
                        "ID": "SGML",
                        "SortAs": "SGML",
                        "GlossTerm": "Standard Generalized Markup Language",
                        "Acronym": "SGML",
                        "Abbrev": "ISO 8879:1986",
                        "GlossDef": {
                            "para": "A meta-markup language, used to create markup languages such as DocBook.",
                            "GlossSeeAlso": ["GML", "XML"]
                        },
                        "GlossSee": "markup"
                    }
                }
            }
        }
    }

读取JSON文件
Python可以使用内置json库轻松地将这些数据从字符串读取为字典:

    import json
    
    ## 将JSON对象定义为字符串
    json_string = """{
        "glossary": {
            "title": "example glossary",
            "GlossDiv": {
                "title": "S",
                "GlossList": {
                    "GlossEntry": {
                        "ID": "SGML",
                        "SortAs": "SGML",
                        "GlossTerm": "Standard Generalized Markup Language",
                        "Acronym": "SGML",
                        "Abbrev": "ISO 8879:1986",
                        "GlossDef": {
                            "para": "A meta-markup language, used to create markup languages such as DocBook.",
                            "GlossSeeAlso": ["GML", "XML"]
                        },
                        "GlossSee": "markup"
                    }
                }
            }
        }
    }"""
    
    
    # 读取JSON数据
    json_data = json.loads(json_string)
    
    print(json_data)

当定义的JSON数据是字符串时,我们可以使用该oads()函数将其读入Python中字典。JSON与字典的格式相同,它由各种类型的键,值对组成。上面的JSON对象具有一个名为title的键,其值是“example
glossary”。它还具有一个名为GlossList的键,该键具有一个字典值,这个值又包含其自己的键值对。我们可以将看到JSON是如何表示我们想要的任何类型的嵌套模式。
现在,我们可以将JSON对象作为字典,并且可以按照在上节中讨论的方法来访问值。如果文件中包含JSON数据,则可以使用load()函数读取数据。
如果有一个名为data.json的文件,则将按照以下方法进行操作:

    with open('data.json') as f:
        data = json.load(f)

现在我们熟悉了JSON文件的操作,下面讨论源文件的操作

源数据

本节主要讲源数据类型的文件以及如何使用Pandas库来读取源数据文件

  • 源数据文件的介绍
  • 源数据文件的读取

源数据文件的介绍
有时我们会得到奇怪格式的数据,并且必须自己写Python代码来处理数据。
例如,可能有一个用竖线(|)分隔的文件。它可能看起来像这样:

    James|22|M
    Sarah|31|F
    Mindy|25|F

在上方,我们有3列数据,每行的3个值用竖线(|)分隔-分别代表名称,年龄和性别。
我们可以在Python中创建相同的文件并使用tempfile进行处理。

    import tempfile
    
    tmp = tempfile.NamedTemporaryFile()
    
    # 将数据写入文件
    with open(tmp.name, 'w') as f:
        f.write("James|22|M\n")
        f.write("Sarah|31|F\n")
        f.write("Mindy|25|F")
    
    # 逐行读取文件中的数据
    with open(tmp.name, "r") as f:
        for line in f:
          print(line)

上面,我们使用tempfile创建了一个包含三行数据的文件。数据的前2行末尾的\ n让程序创建新行。

源数据文件的读取
我们要注意下面这段代码:

    with open(tmp.name, "r") as f:
        for line in f:
          print(line)

我们使用open()命令来读取文件。首先传递要处理的文件名,然后传递r代表读取。
由于我们with
as功能,因此变量f代表文件句柄,并且仅在此范围内有用。这是读取文件的好习惯,因为我们不xu关闭文件句柄。有了文件句柄后,Python可以非常轻松地访问这些行。变量f现在是可迭代的,其中每个可迭代的都是文件的一行。因此,我们可以这样迭代:

    for line in f

上面的代码仅打印出这些行,但是由于我们可以直接访问文件的每行数据,因此我们可以在处理过程中做任操作。例如,以下代码仅取每行的第一个值,并将它们添加到列表中。

    import tempfile
    
    tmp = tempfile.NamedTemporaryFile()
    
    # 将数据写入文件
    with open(tmp.name, 'w') as f:
        f.write("James|22|M\n")
        f.write("Sarah|31|F\n")
        f.write("Mindy|25|F")
    
    first_values = []  # 定义一个列表来存储每一行的第一个值
    with open(tmp.name, "r") as f:  # 打开要读的文件
        for line in f:  # 迭代每一行
          row_values = line.split("|")  # 以“|”切分
          first_values.append(row_values[0])  # 将第一个值添加到列表中
          
    print(first_values)

在这里插入图片描述

posted @ 2021-07-07 14:54  老酱  阅读(513)  评论(0编辑  收藏  举报