六、数据整理

原文:Data Wrangling

译者:飞龙

协议:CC BY-NC-SA 4.0

“数据整理”通常是指将原始数据,转换为可用于你感兴趣的分析的可用形式,包括加载,聚合和格式化。

注意:在整个笔记本中,我们将使用 ‘!’ 运行 shell 命令cat,来打印出示例数据文件的内容。

Python I/O

Python 有一些基本的 I / O (输入/输出)工具。

这是 I / O 的官方 Python 文档

  1. # 查看示例数据文件
  2. !cat files/dat.txt
  3. '''
  4. First line of data
  5. Second line of data
  6. '''
  7. # 首先,显式打开文件对象进行读取
  8. f_obj = open('files/dat.txt', 'r')
  9. # 然后,你可以遍历文件对象,抓取每行数据
  10. for line in f_obj:
  11. # 请注意,我正在删除每行末尾的新行标记('\n')
  12. print(line.strip('\n'))
  13. # 完成后,必须关闭文件对象
  14. f_obj.close()
  15. '''
  16. First line of data
  17. Second line of data
  18. '''
  19. # 由于打开和关闭文件基本上总是在一起,因此有一个快捷方式来完成它们
  20. # 使用 'with' 关键字打开文件,文件对象将在代码块的末尾自动关闭
  21. with open('files/dat.txt', 'r') as f_obj:
  22. for line in f_obj:
  23. print(line.strip('\n'))
  24. '''
  25. First line of data
  26. Second line of data
  27. '''

Python 的 I / O是一种非常“低级”的读取数据文件的方法,并且通常需要大量工作来整理读取文件的细节 - 例如,在上面的示例中,明确地处理新行字符。

只要你有合理的结构化数据文件,使用标准化的文件类型,你就可以使用更高级的函数来处理很多这些细节 - 例如,将数据直接加载到 pandas 数据对象中。

Pandas I/O

Pandas 有一系列函数,可以将标准文件类型的整个文件自动读取到 pandas 对象中。

这是 I / O 的官方 Pandas 文档

  1. import pandas as pd
  2. # Tab 补全来检查所有可用的读取函数
  3. pd.read_

文件类型

存在许多不同的标准化(和非标准化)文件类型,其中可以存储数据。在这里,我们将从检查 CSV 和 JSON 文件开始。

CSV 文件

“逗号分隔值”文件存储数据,以逗号分隔。把它们想象成列表。

这是维基百科中 CSV 文件的更多信息。

  1. # 我们来看一下 csv 文件(以纯文本打印)
  2. !cat files/dat.csv
  3. '''
  4. 1, 2, 3, 4
  5. 5, 6, 7, 8
  6. 9, 10, 11, 12
  7. '''

Python 中的 CSV 文件

  1. # Python 有一个专门用于处理 csv 的模块
  2. import csv
  3. # 我们可以使用 csv 模块读取我们的文件
  4. with open('files/dat.csv') as csvfile:
  5. csv_reader = csv.reader(csvfile, delimiter=',')
  6. for row in csv_reader:
  7. print(', '.join(row))
  8. '''
  9. 1, 2, 3, 4
  10. 5, 6, 7, 8
  11. 9, 10, 11, 12
  12. '''

Pandas 中的 CSV 文件

  1. # Pandas 也具有直接加载 csv 数据的函数
  2. pd.read_csv?
  3. # 让我们读入我们的 csv 文件
  4. pd.read_csv(open('files/dat.csv'), header=None)
0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12

JSON 文件

JavaScript 对象标记文件可以存储层次化键/值对。把它们想象成字典。

这是来自 wikipedia 的 JSON 文件的更多信息。

  1. # 我们来看一下 json 文件(以纯文本打印)
  2. !cat files/dat.json
  3. '''
  4. {
  5. "firstName": "John",
  6. "age": 53
  7. }
  8. '''
  9. # 将 json 看做与字典相似
  10. d = {'firstName': 'John', 'age': '53'}
  11. print(d)
  12. # {'firstName': 'John', 'age': '53'}

Python 中的 JSON 文件

  1. # Python 还有一个用于处理 json 的模块
  2. import json
  3. # 加载 json 文件
  4. with open('files/dat.json') as dat_file:
  5. dat = json.load(dat_file)
  6. # 检查加载的数据类型
  7. print(type(dat))
  8. # <class 'dict'>

Pandas 中的 JSON 文件

  1. # Pandas 还支持读取 json 文件
  2. pd.read_json?
  3. # 你可以使用 pandas 读取 json 格式的字符串
  4. # 请注意,这里我指定将其作为 pd.Series 读取,因为只有一行数据
  5. pd.read_json('{ "first": "Alan", "place": "Manchester"}', typ='series')
  6. '''
  7. first Alan
  8. place Manchester
  9. dtype: object
  10. '''
  11. # 用 pandas 读入我们的 json 文件
  12. pd.read_json(open('files/dat.json'), typ='series')
  13. '''
  14. age 53
  15. firstName John
  16. dtype: object
  17. '''