二、函数
9、随机抽样
语法:
DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
参数:
n
: 整数或 None,指定要抽取的行或列的数量。注意,不能与frac
参数同时使用。frac
: 浮点数或 None,指定要抽取的行或列的比例。例如,frac=0.5
表示抽取 DataFrame 中大约50%的行或列。同样,不能与n
参数同时使用。replace
: 布尔值,默认为 False。如果为 True,则允许抽取到的元素被重复抽取(即抽样是有放回的);如果为 False,则每个元素最多被抽取一次(即抽样是无放回的)。weights
: 字符串或一维数组,默认为 None。用于指定每行或每列的抽样权重。如果指定了weights
,则按照这些权重进行抽样。权重应该与 DataFrame 的行或列(取决于axis
参数)一一对应。random_state
: 整数或 numpy.random.RandomState 对象或 None,默认为 None。用于指定随机数生成器的种子。如果指定了一个整数,则它将被用作随机数生成器的种子;如果指定了一个 RandomState 对象,则直接使用该对象生成随机数;如果为 None,则每次调用sample()
方法时都会生成不同的随机数。axis
: {0 或 'index', 1 或 'columns'}, 默认为 None。指定抽样的轴向。0 或 'index' 表示沿着行的方向抽样(即抽取行);1 或 'columns' 表示沿着列的方向抽样(即抽取列)。如果为 None,则默认抽取行。
import pandas as pd # 创建一个简单的 DataFrame df = pd.DataFrame({ 'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50] }) # 从 DataFrame 中随机抽取2行 sampled_df = df.sample(n=2) print(sampled_df) # 从 DataFrame 中随机抽取50%的行 sampled_df_frac = df.sample(frac=0.5) print(sampled_df_frac) # 使用权重从 DataFrame 中随机抽取行 weights = [0.1, 0.1, 0.1, 0.3, 0.4] # 行的权重 sampled_df_weighted = df.sample(n=2, weights=weights) print(sampled_df_weighted)
10、空值处理
10.1 检测空值
isnull()
和notnull()
方法:
isnull()
:返回一个布尔型 DataFrame,其中的值为True
表示对应位置的值为空(NaN),False
表示不为空。notnull()
:与isnull()
相反,返回一个布尔型 DataFrame,其中的值为True
表示对应位置的值不为空,False
表示为空。
import pandas as pd import numpy as np df = pd.DataFrame({ 'A': [1, 2, np.nan, 4], 'B': [np.nan, 2, 3, 4], 'C': [1, np.nan, np.nan, 4] }) print(df.isnull()) # 显示哪些值为空 print(df.notnull()) # 显示哪些值不为空
10.2 填充空值
fillna()
方法:
- 用于用指定的值填充空值。
- 可以指定一个值、一个字典(为每个列指定不同的填充值)、一个方法(如
ffill
或bfill
分别表示向前填充和向后填充)或一个可调用对象。
df_filled = df.fillna(0) # 用 0 填充所有空值 print(df_filled) df_filled_dict = df.fillna({'A': 1, 'B': 2, 'C': 3}) # 为不同列指定不同的填充值 print(df_filled_dict)
10.3 删除空值
dropna()
方法:
- 用于删除包含空值的行或列。
- 参数
axis
:0 或 'index' 表示删除包含空值的行,1 或 'columns' 表示删除包含空值的列。- 参数
how
:'any' 表示如果任何 NA 值出现,则删除该行或列;'all' 表示如果所有值都是 NA,则删除该行或列。- 参数
thresh
:要求保留的非 NA 值的数量,小于此数量的行/列将被删除。- 参数
subset
:考虑哪些列中的 NA 值。- 参数
inplace
:如果为 True,则修改原始 DataFrame。
df_cleaned = df.dropna() # 删除所有包含空值的行 print(df_cleaned) df_cleaned_cols = df.dropna(axis=1) # 删除所有包含空值的列 print(df_cleaned_cols)
三、读取CSV文件
CSV(Comma-Separated Values,逗号分隔值)文件是一种常见的文本文件格式,它以简单的格式存储表格数据。以下是对CSV文件的详细解释:CSV文件是一种纯文本文件,其中数据的每个部分都由逗号分隔。这种格式的文件通常用于数据导入和导出,与电子表格和数据库软件兼容。
1.文件结构
- 行与列:CSV文件以表格的形式存储数据,每行代表一条记录,每列代表一个字段。记录之间通过回车换行符分隔,字段之间使用逗号分隔。
- 字段封装:如果字段值中包含逗号、换行符、双引号或其他特殊字符,或者字段值本身就是空字符串,该字段应该用双引号包围。内部的双引号需要通过两个连续的双引号来转义。
- 标题行:CSV文件的第一行通常可以包含列的名称,作为标题行。这个标题行遵循与数据行相同的格式规则,即字段名之间用逗号分隔,且可能被双引号包围。
2.特点与用途
- 简单性:CSV文件没有隐藏的格式或复杂的标记,只是纯文本和逗号,因此生成和解析CSV文件相对简单和直接。
- 跨平台与跨应用:CSV是一个纯文本格式,可以在几乎所有操作系统和应用程序中使用,这使得它成为数据交换的首选格式。
- 数据交换:由于其简单性和广泛的应用程序支持,CSV格式经常用于数据交换,特别是在不同的软件和平台之间。
- 数据库导入/导出:许多数据库管理系统允许用户导入或导出数据为CSV格式。
- 电子表格与文本处理:大多数电子表格软件(如Microsoft Excel、Google Sheets等)都支持从CSV导入数据和导出数据到CSV。
3.常用函数
3.1to_csv()
to_csv()
方法用于将 DataFrame 对象导出为 CSV(逗号分隔值)文件。这个方法非常有用,因为它允许你将数据以标准的文本格式保存,便于在其他程序或系统中进行后续的数据处理或分析。
参数
path_or_buf
:字符串或文件对象,表示要写入的 CSV 文件的路径或类文件对象。如果为None
,则输出到字符串缓冲区。sep
:字符,用作字段分隔符。默认为','
,即逗号。columns
:要写入的列名列表。如果为None
,则写入所有列。index
:布尔值或字符串序列,表示是否写入(以及如何写入)行(索引)标签。默认为True
,即写入行索引。如果为False
,则不写入行索引。如果为字符串或字符串序列,则将其作为索引列写入。header
:布尔值或字符串列表,表示是否写入(以及写入哪些)列名作为文件的第一行。默认为True
,即写入所有列名。如果为False
,则不写入列名。如果为字符串列表,则仅写入这些列名。mode
:字符串,表示文件的打开模式(例如'w'
写模式,'a'
追加模式)。默认为'w'
。encoding
:字符串,表示文件的字符编码格式。例如,'utf-8'
。默认为None
,则使用默认的 Python 字符串编码。compression
:字符串或None
,表示要使用的压缩格式(例如'gzip'
,'bz2'
,'zip'
,'xz'
)。如果为None
,则不压缩文件。quoting
:可选的整数或csv.QUOTE_*
常量,用于控制何时引用字段。默认为csv.QUOTE_MINIMAL
。quotechar
:字符,用于引用字段的字符。默认为'"'
。line_terminator
:字符串,表示行终止符。默认为os.linesep
(平台相关的行终止符,例如 Windows 上的'\r\n'
,Unix/Linux 上的'\n'
)。chunksize
:整数,表示写入文件的块大小(行数)。如果指定,则文件将被逐块写入,这对于处理大文件很有用。默认为None
,即一次性写入整个文件。date_format
:字符串,表示日期字段的格式化字符串。默认为None
,即使用默认的日期格式。doublequote
:布尔值,表示当quotechar
出现在字段中时,应将其解释为普通字符(通过加倍quotechar
来转义)。默认为True
。escapechar
:字符,用于转义quotechar
字符。默认为None
。decimal
:字符,表示字符串中的小数分隔符。默认为'.'
。errors
:字符串,表示如何处理编码和解码错误。默认为'strict'
。storage_options
:字典,用于传递给底层存储系统的额外关键字参数(例如,用于云存储服务的访问密钥和秘密密钥)。
import pandas as pd # 创建一个简单的 DataFrame df = pd.DataFrame({ 'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'Los Angeles', 'Chicago'] }) # 将 DataFrame 导出为 CSV 文件 df.to_csv('output.csv', index=False) # 不写入行索引 # 读取刚才导出的 CSV 文件以验证结果 df_read_back = pd.read_csv('output.csv') print(df_read_back)
3.2read_csv()
参数
path_or_buf
:字符串或文件对象,表示要写入的 CSV 文件的路径或类文件对象。如果为None
,则输出到字符串缓冲区。sep
:字符,用作字段分隔符。默认为','
,即逗号。columns
:要写入的列名列表。如果为None
,则写入所有列。index
:布尔值或字符串序列,表示是否写入(以及如何写入)行(索引)标签。默认为True
,即写入行索引。如果为False
,则不写入行索引。如果为字符串或字符串序列,则将其作为索引列写入。header
:布尔值或字符串列表,表示是否写入(以及写入哪些)列名作为文件的第一行。默认为True
,即写入所有列名。如果为False
,则不写入列名。如果为字符串列表,则仅写入这些列名。mode
:字符串,表示文件的打开模式(例如'w'
写模式,'a'
追加模式)。默认为'w'
。encoding
:字符串,表示文件的字符编码格式。例如,'utf-8'
。默认为None
,则使用默认的 Python 字符串编码。compression
:字符串或None
,表示要使用的压缩格式(例如'gzip'
,'bz2'
,'zip'
,'xz'
)。如果为None
,则不压缩文件。quoting
:可选的整数或csv.QUOTE_*
常量,用于控制何时引用字段。默认为csv.QUOTE_MINIMAL
。quotechar
:字符,用于引用字段的字符。默认为'"'
。line_terminator
:字符串,表示行终止符。默认为os.linesep
(平台相关的行终止符,例如 Windows 上的'\r\n'
,Unix/Linux 上的'\n'
)。chunksize
:整数,表示写入文件的块大小(行数)。如果指定,则文件将被逐块写入,这对于处理大文件很有用。默认为None
,即一次性写入整个文件。date_format
:字符串,表示日期字段的格式化字符串。默认为None
,即使用默认的日期格式。doublequote
:布尔值,表示当quotechar
出现在字段中时,应将其解释为普通字符(通过加倍quotechar
来转义)。默认为True
。escapechar
:字符,用于转义quotechar
字符。默认为None
。decimal
:字符,表示字符串中的小数分隔符。默认为'.'
。errors
:字符串,表示如何处理编码和解码错误。默认为'strict'
。storage_options
:字典,用于传递给底层存储系统的额外关键字参数(例如,用于云存储服务的访问密钥和秘密密钥)。
import pandas as pd # 创建一个简单的 DataFrame df = pd.DataFrame({ 'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'Los Angeles', 'Chicago'] }) # 将 DataFrame 导出为 CSV 文件 df.to_csv('output.csv', index=False) # 不写入行索引 # 读取刚才导出的 CSV 文件以验证结果 df_read_back = pd.read_csv('output.csv') print(df_read_back)
四、绘图
Pandas 在数据分析、数据可视化方面有着较为广泛的应用,Pandas 对 Matplotlib 绘图软件包的基础上单独封装了一个plot()
接口,通过调用该接口可以实现常用的绘图操作;
Pandas 之所以能够实现了数据可视化,主要利用了 Matplotlib 库的 plot() 方法,它对 plot() 方法做了简单的封装,因此您可以直接调用该接口;
只用 pandas 绘制图片可能可以编译,但是不会显示图片,需要使用 matplotlib 库,调用 show() 方法显示图形。
import pandas as pd import matplotlib.pyplot as plt # 创建一个示例 DataFrame data = { 'A': [1, 2, 3, 4, 5], 'B': [10, 20, 25, 30, 40] } df = pd.DataFrame(data) # 绘制折线图 df.plot(kind='line') # 显示图表 plt.show() # 绘制柱状图 df.plot(kind='bar') # 显示图表 plt.show() # 绘制直方图 df['A'].plot(kind='hist') # 显示图表 plt.show() # 绘制散点图 df.plot(kind='scatter', x='A', y='B') # 显示图表
# 创建一个示例 Series data = { 'A': 10, 'B': 20, 'C': 30, 'D': 40 } series = pd.Series(data) # 绘制饼图 series.plot(kind='pie', autopct='%1.1f%%') # 显示图表 plt.show()