Python中CSV读取和转换

在本教程中,我们研究 Python 中CSV的读取和转换,尤其是Pandas 库强大的数据处理功能。

pandas read_csv
这个函数是最常用的 pandas 函数之一,特别是用于数据预处理。对于将 CSV 文件中的数据导入到 Python 环境中以进行进一步分析等任务来说,它的价值无可估量。此函数能够从本地计算机和直接从 URL 读取 CSV 文件。此外,使用 pandas 读取 csv 文件附带了大量选项来自定义数据加载过程以满足您的特定需求。

使用 Pandas Concat 时应注意的事项
使用 pandas read_csv 函数(pd.read_csv)将 CSV 文件读入 DataFrame 时,有几个重要事项需要注意:

  • 分隔符和编码:使用 pandas read_csv 时,请始终指定适当的定界符和编码参数。默认分隔符是逗号,但 CSV 文件也可以使用制表符或分号等其他分隔符。此外,确保编码与文件的编码相匹配,以便正确读取特殊字符。
  • 处理缺失数据:注意如何在 CSV 文件中表示缺失数据。默认情况下,pandas read_csv 会将空字符串、NA 和 NULL 值视为缺失数据。您可以使用 na_values 和 keep_default_na 等参数自定义缺失值的处理方式。
  • 解析日期和时间:在处理 CSV 文件中的日期和时间数据时,请在 pandas read_csv 中指定 parse_dates 参数,以确保正确解析日期和时间列。这样,您就可以在 DataFrame 中以日期时间对象的形式处理数据。

配置您的开发环境
要遵循本指南,您需要在系统上安装 Pandas 库。
Pandas 可以通过 pip 安装:python pip install pandas

项目结构:

tree . --dirsfirst
.
├── data
│   ├── large_video_game_sales.csv
│   ├── movie_ratings.csv
│   ├── odd_delimiter_sales.csv
│   └── video_game_sales.csv
└── pandas_read_csv_examples.py

2 directories, 5 files

使用 pandas read_csv 的简单示例
本例演示如何使用 pandas.read_csv 加载一个简单的数据集。我们将使用一个包含电影评分的 CSV 文件。目的是将这些数据加载到 pandas DataFrame 中,并打印数据的基本信息。

# 首先,让我们导入 pandas 软件包。
import pandas as pd

#现在,让我们加载一个名为 "movie_ratings.csv "的 CSV 文件。这是一个来自您最喜爱的影评网站的电影评分数据集。
# 数据集包括 "标题"、"年份"、"评级 "和 "评论者 "列。

# 将 CSV 文件加载到 DataFrame 中。
movie_ratings = pd.read_csv('.data/movie_ratings.csv')

# 让我们来看看电影分级的前几行,确保一切看起来都很好。
print(movie_ratings.head())<font></font>

# 我们数据集的基本信息如何?让我们检查一下数据类型以及是否存在缺失值。
print(movie_ratings.info())
  • 首先,我们使用 pd 别名导入 pandas 软件包。该软件包提供数据结构和数据分析工具。
  • 第 8 行将名为 "movie_ratings.csv "的 CSV 文件加载到名为 "movie_ratings "的 DataFrame 中。该文件可能包含电影评分数据,列如 "标题"、"年份"、"评分 "和 "评论者"。
  • print(movie_ratings.head()) 函数用于显示 "movie_ratings" DataFrame 的前几行。这样可以快速查看数据。
  • print(movie_ratings.info()) 函数用于显示 "movie_ratings "数据帧的基本信息。这包括列的数据类型和是否存在缺失值。这有助于了解数据集的结构和完整性。

运行这段代码后,您将看到类似下面的输出结果:

      Title      Year      Rating       Reviewer<font></font>
0     The Shawshank Redemption  1994     9.3       John Doe<font></font>
1     The Godfather  1972     9.2     Jane Smith<font></font>
2     The Dark Knight  2008     9.0  Emily Johnson<font></font>
3     Pulp Fiction  1994     8.9     Mike Brown<font></font>
4     The Lord of the Rings: The Return of the King  2003     8.9    Sarah Davis<font></font>
<font></font>
RangeIndex: 5 entries, 0 to 4<font></font>
Data columns (total 4 columns):<font></font>
 #   Column    Non-Null Count  Dtype  <font></font>
---  ------    --------------  -----  <font></font>
 0   Title     5 non-null      object<font></font>
 1   Year      5 non-null      int64  <font></font>
 2   Rating    5 non-null      float64<font></font>
 3   Reviewer  5 non-null      object<font></font>
dtypes: float64(1), int64(1), object(2)<font></font>
memory usage: 292.0+ bytes<font></font>
None

该输出显示了 pandas read_csv 如何处理 csv 文件的导入,以及如何显示 csv 数据的相关信息。现在,让我们来学习一些更高级的功能。

Dask
Dask 是 Python 中一个强大的并行计算库,可以有效地处理大型数据集,使其成为 Pandas 可能遇到内存问题的情况的绝佳替代方案。

为什么 Dask 是处理大型数据集的更好方法

  • 可扩展性:Dask 可以扩展到机器集群并处理比可用内存大得多的数据集的计算,而 pandas 受到机器 RAM 大小的限制。
  • 惰性计算:Dask 操作是惰性的,这意味着它们构建任务图并仅在您显式计算结果时才执行它。这使得 Dask 能够更有效地优化运营并管理资源。
  • 并行计算:Dask 可以自动将数据和计算划分到多个核心或不同的机器上,从而显著提高速度,尤其是对于大规模数据。
这使得 Dask 成为一个很好的替代品 ,在处理非常大的数据集或在分布式计算环境中时,并行处理可以显著加快数据操作速度。

Python 中的字符串转 CSV
字符串由一系列字符组成,而 CSV 是一个逗号分隔的值,如何将字符串转换为 CSV Python?

使用 csv 模块将 Python 字符串转换为 CSV
Python 有一个名为csv的模块,允许您处理 csv 数据,实际上,该模块有一个名为writerow()的函数,它将数据写入 csv 文件,但在这里我们将看到如何将字符串写入 CSV 文件。

import csv

data_string = """Name, Age, Occupation
Roy, 28, Data Scientist
Vincent, 34, Web Developer
Willie, 25, Graphic Designer"""

# 将字符串分行
data_rows = data_string.strip().split('\n')

with open('output.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    for row in data_rows:
        #使用 writerow() 方法在逗号处分割每一行并写入 CSV
        writer.writerow(row.split(', '))


第一个字符串被定义到一个名为 data_string 的变量中。然后,调用 strip() 方法删除字符串中不需要的字符;之后,使用 split('\n') 将字符串分成几行。

然后,使用 open('output.csv', 'w', newline=") 作为 file: 的代码,在写模式 "w "下打开一个文件。

如果 output.csv 文件不存在,则创建一个新文件,并将文件对象作为 "文件 "返回。然后,使用 csv 模块中的 writer() 方法,使用 csv.writer(file) 将文件对象传递给 writer() 方法,该方法返回 writer 对象。

然后针对 data_rows 中的 row 使用这行代码:从 data_rows 中提取每一行,然后使用 row.split(", ") 根据逗号分割每一行。最后使用 writerow() 方法将每一行写入 output.csv 文件。

使用 write() 方法将字符串写入 CSV
可以格式化 csv 文件的字符串,然后使用文件的 write() 方法将字符串写入 CSV 文件。

# defined string into my_str variable
my_str = 'Bobby;456;983'

#以writting 模式打开 my_file.csv 文件。
with open('file.csv', 'w') as out:

    #根据分隔符';' 
    #nbsp; 将字符串拆分成子串列表,并使用','.join()方法用逗号(',')将它们连接起来。
    lines = [','.join(line) for line in my_str.split(';')]

    #使用换行符('\n')作为      分隔符,连接行列表中的元素,创建新字符串 my_str
    my_str = '\n'.join(lines)
    # writing the content of my_str to the 'file.csv' file using the write() method
    out.write(my_str)

将在计算机上获得file.csv文件。打开该文件时,您将看到每个字符串字符都由逗号分隔。