Pandas 读取外部数据

PandasBeginner
立即练习

介绍

在数据分析中,第一步通常是将你的数据加载到结构化格式中。Pandas 是一个强大的 Python 库,非常擅长这项任务。从 CSV 等平面文件读取数据的最常用函数是 pandas.read_csv()。这个函数非常灵活,提供了广泛的参数来处理不同的文件格式和潜在问题。

在本实验中,你将学习如何使用 pd.read_csv() 将 CSV 文件中的数据导入到 Pandas DataFrame 中。我们将介绍如何处理注释、指定表头、管理缺失值以及对加载的数据进行初步检查。

使用 read_csv 读取 CSV 文件

在本步骤中,你将学习 pd.read_csv() 函数的基本用法,将数据从 CSV 文件加载到 Pandas DataFrame 中。

我们的项目目录 ~/project 包含一个名为 data.csv 的文件。让我们检查一下它的内容。它在开头包含一些注释行,这些行以 # 符号开头。可以使用 comment 参数指示 read_csv 函数忽略这些行。

首先,从左侧的文件浏览器中打开 main.py 文件。我们将在该文件中编写 Python 代码。

将以下代码添加到 main.py 中,以导入 Pandas 并读取 data.csv 文件。我们将把生成的 DataFrame 赋值给一个名为 df 的变量,然后打印它。

import pandas as pd

## 读取 CSV 文件,将以 '#' 开头的行视为注释
df = pd.read_csv('data.csv', comment='#')

## 打印 DataFrame
print(df)

现在,要运行脚本,请在 WebIDE 中打开一个终端(你可以使用菜单 Terminal > New Terminal),然后执行以下命令:

python3 main.py

你应该会看到以下输出,它显示了 CSV 文件内容已加载到结构化的 DataFrame 中。

   id     name          age         city
0   1    Alice           25     New York
1   2      Bob           30  Los Angeles
2   3  Charlie  Not Available       London
3   4    David           35          NaN
4   5      Eve           22        Paris

在 read_csv 中指定表头行

在本步骤中,我们将探讨 read_csv 函数的 header 参数。

默认情况下,read_csv 假定文件中的第一行(非注释行、非跳过行)是包含列名的表头行。在我们的 data.csv 文件中,在跳过注释行后,id,name,age,city 这一行被正确地推断为表头。

header 参数允许你显式地指定哪一行用作表头。它接受一个整数,表示行索引(从 0 开始)。由于第一行数据(在注释之后)是我们的表头,其索引是 0

让我们修改 main.py 文件,显式设置 header=0。虽然在我们的情况下这是默认行为,但明确指定可以防止格式异常的文件出现错误。

使用以下代码更新你的 main.py

import pandas as pd

## 显式指定第一行(索引为 0)在注释之后是表头
df = pd.read_csv('data.csv', comment='#', header=0)

print(df)

再次从终端运行脚本:

python3 main.py

输出将与上一步相同,因为我们只是确认了默认行为。这种做法对于代码的清晰度和健壮性很有用。

   id     name          age         city
0   1    Alice           25     New York
1   2      Bob           30  Los Angeles
2   3  Charlie  Not Available       London
3   4    David           35          N/A
4   5      Eve           22        Paris

使用 na_values 参数处理缺失值

在本步骤中,你将学习如何处理缺失数据的自定义表示。

如果你查看上一步的 DataFrame,你会发现在 age 列中有 "Not Available" 值,在 city 列中有 NaN 值。Pandas 会自动识别一些常见的缺失值指示符,如空字符串、NAN/A,但不会识别自定义的如 "Not Available"。我们可以使用 na_values 参数提供一个字符串列表,这些字符串将被解释为 NaN(Not a Number),这是 Pandas 用于缺失数据的标准标记。

修改你的 main.py 以包含 na_values 参数。

import pandas as pd

## 定义一个将被视为缺失值的字符串列表
missing_values = ["Not Available", "N/A"]

## 读取 CSV,指定自定义缺失值
df = pd.read_csv('data.csv', comment='#', na_values=missing_values)

print(df)

现在,运行脚本:

python3 main.py

观察新的输出。"Not Available" 字符串已被替换为 NaN

   id     name   age         city
0   1    Alice  25.0     New York
1   2      Bob  30.0  Los Angeles
2   3  Charlie   NaN       London
3   4    David  35.0          NaN
4   5      Eve  22.0        Paris

请注意,age 列的数据类型也已更改为 float64 以容纳 NaN 值。

使用 head 方法显示前几行

在本步骤中,你将学习如何检查 DataFrame 的前几行。

处理大型数据集时,打印整个 DataFrame 是低效的,并且会弄乱你的屏幕。.head() 方法是一种方便的方式来快速预览你的数据。默认情况下,它返回前 5 行。

你也可以向 .head() 传递一个整数来指定你想要查看的行数。让我们只显示 DataFrame 的前 3 行。

按如下方式更新你的 main.py 文件。现在我们将只打印 DataFrame 的头部,而不是整个 DataFrame。

import pandas as pd

missing_values = ["Not Available", "N/A"]
df = pd.read_csv('data.csv', comment='#', na_values=missing_values)

## 显示 DataFrame 的前 3 行
print(df.head(3))

从你的终端执行脚本:

python3 main.py

输出现在会短得多,只显示表头和前三条记录。

   id     name   age         city
0   1    Alice  25.0     New York
1   2      Bob  30.0  Los Angeles
2   3  Charlie   NaN       London

使用 shape 属性检查 DataFrame 的形状

在本步骤中,你将学习如何检查 DataFrame 的维度。

了解行数和列数是数据分析中的一个基本检查。Pandas DataFrame 有一个 .shape 属性,它返回一个包含行数和列数的元组。

请注意,.shape 是一个属性,而不是一个方法,因此在访问它时不需要使用括号 ()

让我们修改 main.py 来打印 DataFrame 的形状。

import pandas as pd

missing_values = ["Not Available", "N/A"]
df = pd.read_csv('data.csv', comment='#', na_values=missing_values)

## 获取 DataFrame 的维度(行数,列数)
df_shape = df.shape

print(df_shape)

最后一次运行脚本:

python3 main.py

输出将是一个元组,表明我们的 DataFrame 有 5 行和 4 列。

(5, 4)

总结

恭喜你完成了这个实验!你已经掌握了使用 Pandas 读取和检查数据的基本技能。

在本实验中,你已熟练掌握:

  • 使用 pd.read_csv() 将 CSV 文件读取到 DataFrame 中。
  • 使用 comment 参数跳过注释行。
  • 使用 header 参数显式定义表头行。
  • 使用 na_values 参数处理自定义的缺失值。
  • 使用 .head() 方法预览 DataFrame。
  • 使用 .shape 属性检查 DataFrame 的维度。

这些是基础操作,几乎是所有数据分析任务的起点。掌握了这些技能,你将能更好地应对各种数据导入挑战。