当前位置: 移动技术网 > IT编程>脚本编程>Python > Python数据分析与可视化(读取数据)

Python数据分析与可视化(读取数据)

2020年07月26日  | 移动技术网IT编程  | 我要评论

读取数据

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

含有逗号分隔符文件

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

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

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

  • 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或者其他文本编辑器打开。可以看到每行的数据都是以逗号分隔开的,如下图
在这里插入图片描述
我们可以发现这个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)

本文地址:https://blog.csdn.net/qq_45408935/article/details/107568110

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网