数据科学入门:处理CSV文件与面向对象编程
立即解锁
发布时间: 2025-08-29 10:27:56 阅读量: 7 订阅数: 16 AIGC 

# 数据科学入门:处理 CSV 文件与面向对象编程
## 1. 数据科学中 CSV 文件处理基础
### 1.1 异常处理注意事项
在 `finally` 套件中引发异常可能会导致难以发现的问题。如果在 `finally` 套件执行时,有异常未被处理,就会发生栈展开。若 `finally` 套件引发了一个新的、未被捕获的异常,那么第一个异常将会丢失,新的异常会被传递给下一个包含它的 `try` 语句。因此,`finally` 套件应始终将可能引发异常的代码包含在 `try` 语句中,以便在该套件内处理异常。
### 1.2 Python 标准库 `csv` 模块操作
#### 1.2.1 写入 CSV 文件
CSV(逗号分隔值)是一种流行的文件格式。可以使用 Python 标准库的 `csv` 模块来处理 CSV 文件。以下是创建 `accounts.csv` 文件的示例代码:
```python
import csv
with open('accounts.csv', mode='w', newline='') as accounts:
writer = csv.writer(accounts)
writer.writerow([100, 'Jones', 24.98])
writer.writerow([200, 'Doe', 345.67])
writer.writerow([300, 'White', 0.00])
writer.writerow([400, 'Stone', -42.16])
writer.writerow([500, 'Rich', 224.62])
```
上述代码中,`csv.writer` 函数返回一个对象,用于将 CSV 数据写入指定的文件对象。`writerow` 方法接收一个可迭代对象,并将其存储到文件中。默认情况下,`writerow` 使用逗号分隔值,但也可以指定自定义分隔符。如果写入的数据字符串中包含逗号,`writerow` 会将该字符串用双引号括起来,例如:
```python
[100, 'Jones, Sue', 24.98]
```
写入文件后会变成:
```
100,"Jones, Sue",24.98
```
#### 1.2.2 读取 CSV 文件
可以使用 `csv.reader` 函数从 CSV 文件中读取数据。以下是读取 `accounts.csv` 文件的示例代码:
```python
with open('accounts.csv', 'r', newline='') as accounts:
print(f'{"Account":<10}{"Name":<10}{"Balance":>10}')
reader = csv.reader(accounts)
for record in reader:
account, name, balance = record
print(f'{account:<10}{name:<10}{balance:>10}')
```
`csv.reader` 函数返回一个对象,用于从指定的文件对象中读取 CSV 格式的数据。可以像迭代文件对象一样迭代 `reader` 对象,每次返回一个逗号分隔值的记录。
### 1.3 处理 CSV 数据时的注意事项
#### 1.3.1 数据字段中的逗号
处理包含嵌入式逗号的字符串时要小心,例如 `'Jones, Sue'`。如果不小心将其输入为两个字符串 `'Jones'` 和 `'Sue'`,`writerow` 会创建一个包含四个字段的 CSV 记录,而不是三个。读取 CSV 文件的程序通常期望每个记录具有相同数量的字段,否则会出现问题。
#### 1.3.2 逗号缺失和多余问题
在准备和处理 CSV 文件时,要注意逗号的使用。例如,原本应该是 `100,85,77,9` 的记录,如果不小心省略了一个逗号,变成 `100,8577,9`,那么该记录就只有三个字段,其中一个字段的值 `8577` 是无效的。如果在应该只有一个逗号的地方使用了两个相邻的逗号,例如 `100,85,,77,9`,那么记录就会有五个字段,其中一个字段会为空。这些逗号相关的错误可能会使处理记录的程序产生混淆。
### 1.4 使用 Pandas 处理 CSV 文件
#### 1.4.1 数据集来源
在数据科学案例研究中,可以使用各种免费的开放数据集来演示机器学习和自然语言处理概念。一些常见的数据集来源包括:
- Rdatasets 存储库:提供了超过 1100 个逗号分隔值(CSV)格式的免费数据集,可在 [https://vincentarelbundock.github.io/Rdatasets/datasets.html](https://vincentarelbundock.github.io/Rdatasets/datasets.html) 访问。还有专门用于访问 Rdatasets 的 `pydataset` 模块,安装和使用说明可参考 [https://github.com/iamaziz/PyDataset](https://github.com/iamaziz/PyDataset)。
- [https://github.com/awesomedata/awesome-public-datasets](https://github.com/awesomedata/awesome-public-datasets):另一个大型数据集来源。
#### 1.4.2 处理本地存储的 CSV 文件
可以使用 `pandas` 的 `read_csv` 函数将 CSV 数据集加载到 `DataFrame` 中。以下是加载并显示之前创建的 `accounts.csv` 文件的示例代码:
```python
import pandas as pd
df = pd.read_csv('accounts.csv', names=['account', 'name', 'balance'])
print(df)
```
`names` 参数指定 `DataFrame` 的列名。如果不提供该参数,`read_csv` 会假设 CSV 文件的第一行是逗号分隔的列名列表。要将 `DataFrame` 以 CSV 格式保存到文件中,可以调用 `DataFrame` 的 `to_csv` 方法:
```python
df.to_csv('accounts_from_dataframe.csv', index=False)
```
`index=False` 关键字参数表示不将行名写入文件。
#### 1.4.3 读取泰坦尼克号灾难数据集
泰坦尼克号灾难数据集是最流行的机器学习数据集之一,有多种格式,包括 CSV。可以使用 `read_csv` 函数通过 URL 加载该数据集:
```python
import pandas as pd
titanic = pd.read_csv('https://vincentarelbundock.github.io/' +
'Rdatasets/csv/carData/TitanicSurvival.csv')
```
可以使用 `head` 和 `tail` 方法查看数据集的前几行和后几行:
```python
print(titanic.head())
print(titanic.tail())
```
还可以自定义列名,例如将 `'Unna
0
0
复制全文
相关推荐










