Python包——pandas3

二、函数

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值